Python中的shape()详解

 更新时间:2023年08月24日 08:48:53   作者:KentoYoung  
这篇文章主要介绍了Python中的shape()详解,在debug深度学习相关代码的时候,很容易出现shape()这样形式的东西,用来告知输出数据的形式,需要的朋友可以参考下

shape()含义

在笔者debug深度学习相关代码的时候,很容易出现shape()这样形式的东西,用来告知输出数据的形式

由于shape()里出现的数字数量不同,还经常有shape(?,64,512)这样的数据存在

因此上网查了一些信息,作出比较通俗易懂的解释:

import numpy as np
a = 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)。

区分一维数组和二维数组

有几个中括号就为几维数组

因此在上文中,有三对中括号,是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个元素。

shape()中“?”的含义

而在debug相关程序时,可能会出现shape(?,2,3)这便代表数组每一个都是2行3列的,前面这个“?”便代表批处理个数

若为1则有1个,为2则有两个,但是在debug的时候不知道有几个,所以以“?”的形式显示。

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

from keras.models import Input,Model
from keras.layers import Dense,Conv2D,TimeDistributed
input_ = 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()详解的文章就介绍到这了,更多相关Python的shape()内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pytorch常用函数之torch.randn()解读

    pytorch常用函数之torch.randn()解读

    这篇文章主要介绍了pytorch常用函数之torch.randn()解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python用requests模块实现动态网页爬虫

    Python用requests模块实现动态网页爬虫

    大家好,本篇文章主要讲的是Python用requests模块实现动态网页爬虫,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • Django单元测试中Fixtures的使用方法

    Django单元测试中Fixtures的使用方法

    这篇文章主要介绍了Django单元测试中Fixtures用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Python爬虫小练习之爬取并分析腾讯视频m3u8格式

    Python爬虫小练习之爬取并分析腾讯视频m3u8格式

    读万卷书不如行万里路,学的扎不扎实要通过实战才能看出来,本篇文章手把手带你爬下腾讯视频的m3u8格式来分析,大家可以在过程中查缺补漏,看看自己掌握程度怎么样
    2021-10-10
  • 使用OpenCV校准鱼眼镜头的方法

    使用OpenCV校准鱼眼镜头的方法

    这篇文章主要介绍了使用OpenCV校准鱼眼镜头的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Python映射拆分操作符用法实例

    Python映射拆分操作符用法实例

    这篇文章主要介绍了Python映射拆分操作符用法,实例分析了Python映射拆分操作符**的使用技巧,需要的朋友可以参考下
    2015-05-05
  • 关于Python 中IndexError:list assignment index out of range 错误解决

    关于Python 中IndexError:list assignment index out of rang

    这篇文章主要介绍了Python 中IndexError:list assignment index out of range 错误解决,概述了两个常见的列表函数,它们可以帮助我们在替换两个列表时帮助我们处理 Python 中的索引错误,需要的朋友可以参考下
    2023-05-05
  • 关于Python中的编码规范

    关于Python中的编码规范

    这篇文章主要介绍了关于Python中的编码规范,一千个程序员有一千套编码规范,统一的编码规范可以提高开发效率,需要的朋友可以参考下
    2023-04-04
  • Flask路由尾部有没有斜杠有什么区别

    Flask路由尾部有没有斜杠有什么区别

    这篇文章主要介绍了Flask路由尾部加不加斜杠有什么区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-09-09
  • Python的文本常量与字符串模板之string库

    Python的文本常量与字符串模板之string库

    这篇文章主要介绍了Python的文本常量与字符串模板string库,文中有非常详细的代码示例,对正在学习python的小伙伴们有很好的帮助哟,需要的朋友可以参考下
    2021-05-05

最新评论