Python里对于shape()的理解

(1)shape()含义

在笔者debug深度学习相关代码的时候,很容易出现shape()这样形式的东西,用来告知输出数据的形式,由于shape()里出现的数字数量不同,还经常有shape(?,64,512)这样的数据存在,因此上网查了一些信息,作出比较通俗易懂的解释:

import numpy as npa = np.array([[[1,2,3],[4,5,6]]])
print(a.shape)
(1, 2, 3)

表示该数组有1个,是2行3列的数组。每一个shape里的数字对应数组中的一对中括号,第一个数字1表示最外层的中括号。以此类推,数字2表示第二层中括号,数字3表示最里层的中括号。如果定义array时去掉了最外层的括号那么输出的shape为(2, 3)。

(2)区分一维数组和二维数组

有几个中括号就为几维数组
因此在上文中,有三对中括号,是3维数组,shape()中有3个数。

a = np.array([1,2])     #a.shape值(2,),意思是一维数组,数组中有2个元素。
b = np.array([[1],[2]]) #b.shape值是(2,1),意思是一个二维数组,每行有1个元素。
c = np.array([[1,2]])   #c.shape值是(1,2),意思是一个二维数组,每行有2个元素。

(3)shape()中“?”的含义

而在debug相关程序时,可能会出现shape(?,2,3)这便代表数组每一个都是2行3列的,前面这个“?”便代表批处理个数,若为1则有1个,为2则有两个,但是在debug的时候不知道有几个,所以以“?”的形式显示。

(4)shape()中有四个数,第一个数表示时间序列(批处理数)

from keras.models import Input,Model
from keras.layers import Dense,Conv2D,TimeDistributedinput_ = Input(shape=(12,32,32,3))
out = TimeDistributed(Conv2D(filters=32,kernel_size=(3,3),padding='same'))(input_)
model = Model(inputs=input_,outputs=out)
model.summary()

而这里,shape()中有四个数。第一个12代表就是时间序列,32,32,3指的是高,宽,通道数。卷积操作使用TimeDistributed就相当与这12个时间序列共享一个卷积层参数信息,无论时间序列值为多少,参数总量还是一定的。此处一共有896个参数,卷积核weights有3×3×3×32=864个,卷积核bias有32个。

附TimeDistributed解释

关于TimeDistributed有一个比较通俗的示例解释:
考虑一批32个样本,其中每个样本是一个由16个维度组成的10个向量的序列。该层的批输入形状然后(32, 10, 16)。

可以这么理解,输入数据是一个特征方程,X1+X2+…+X10=Y,从矩阵的角度看,拿出未知数,就是10个向量,每个向量有16个维度,这16个维度是评价Y的16个特征方向。

TimeDistributed层的作用就是把Dense层应用到这10个具体的向量上,对每一个向量进行了一个Dense操作,假设是下面这段代码:

model = Sequential()model.add(TimeDistributed(Dense(8), input_shape=(10, 16)))

输出还是10个向量,但是输出的维度由16变成了8,也就是(32,10,8)。

TimeDistributed层给予了模型一种一对多,多对多的能力,增加了模型的维度。

Python里对于shape()的理解相关推荐

  1. python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递

    python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...

  2. TensorFlow里,shape=(?, 120)里的问号是怎么回事呢

    TensorFlow里,shape=(?, 120)里的问号是怎么回事呢   125 self.cos_sim (1024, 51) Tensor("cosine-imilarity-lay ...

  3. python装饰器类-PYTHON里的装饰器能装饰类吗

    扩展回答 如何理解python里的装饰器 通常可以理解它是一个hook 的回调函数. 或者是理解成python 留给二次开发的一个内置API. 一般是用回调和hook 方式实现的. 如何理解Pytho ...

  4. python nlp包_StanfordNLP,让你在 Python 里一手掌握 53 种自然语言分析

    发表日期:2019-06-12 StanfordNLP,让你在 Python 里一手掌握 53 种自然语言分析 -- 不久之前,斯坦福大学公开了它最新的自然语言处理代码库-- StanfordNLP. ...

  5. python里面的dict和set

    python里面的dict和set dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速 ...

  6. python里面的tuple与list对比

    python里面的tuple与list对比 tuple 另一种有序列表叫元组:tuple.tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字: >> ...

  7. python里面的list

    python里面的list list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: ...

  8. Python里的++和--不是运算符

    Python是不支持++和--运算符的,虽然在很多其他语言里经常见到.然而,在Python里把++和--放在表达式里有时候却是可以的,只是这时候不应该理解为其他语言里的++(自增)和--(自减)运算符 ...

  9. python里的collections模块

    python里的collections模块 collections模块里提供了一些特殊功能的容器: namedtuple deque ChainMap Counter OrderedDict defa ...

  10. python中的类怎样理解_深入理解Python中的元类(metaclass)

    如何理解python当中的元类 把这个提到外面 class __metaclass__(type): " simple custom metaclass to block adding ne ...

最新文章

  1. Spring boot的properties文件编码设置
  2. repo 的用法和理解
  3. CodeForces - 609E Minimum spanning tree for each edge(最小生成树+树链剖分+线段树/树上倍增)
  4. 调用咏南中间件插件演示
  5. VC中使用ADO的方法
  6. 交换机IP-MAC地址绑定
  7. 通过 ASP.NET 2.0 的数据增强功能来提高负载和减少代码 --作者:Dino Esposito
  8. 代理模式(Proxy)--静态代理
  9. 用python进行wifi密码生成
  10. Adobe Flash runtimes路线图
  11. C++ 常用代码大全
  12. Word插入脚注只占左下角一栏的方法
  13. Echarts地图实现点击某地区跳转到指定页面
  14. Number of Operations to Decrement Target to Zero - 滑动窗口
  15. html账号输入框整体透明,HTML在透明输入框里添加图标的实现代码
  16. hdu 4009 Transfer water(最小树形图模板)
  17. v-html加过滤器
  18. 【英语月总结】11月--秋鸣啾啾,积少成多
  19. Python数据处理中 pd.concat 与 pd.merge 区别
  20. 数据结构课设之校园导航系统(迪杰斯特拉算法)

热门文章

  1. 聊一聊我在腾讯的外包同事
  2. Xms Xmx PermSize MaxPermSize 区别
  3. maven运行Error:(3, 14) java: 程序包不存在
  4. 请在微信客户端中打开链接是什么鬼 ?
  5. 房价必然上涨的N个原因
  6. java生成竖排文字图片_怎么给图片加上竖排文字?
  7. 微信策划推出指纹支付
  8. tm影像辐射定标_ENVI中TM的辐射定标和大气校正
  9. lro gro_斯威夫特:Gro吟M
  10. ubuntu美化之conky美化