美文网首页
tf.nn.conv2d()笔记

tf.nn.conv2d()笔记

作者: 彭嘎嘎 | 来源:发表于2019-06-13 10:14 被阅读0次

Time:2019-06-12

conv2d()用于实现卷积函数的计算,四个参数需要指定,input,filter,strides and padding。

官网给的定义

input输出的参数,是一个4维tensor。shape是[batch, in_height, in_width, in_channels],其中batch表示处理的批数,比如一次处理50批数据,in_height和in_weight分别是张量的高度和宽度,in_channelss是通道数量(比如有3个通道,分别对应R,G,B)

filter:卷积核,4维张量。shape是[filter_height, filter_width, in_channels, out_channels]。filter_height和filter_width分别对应卷积神经元的高度和宽度,in_channels代表图像通道数(这里和input的in_channels是相等的)。out_channels代表卷积核的数目(比如用了3次卷积核计算,则有三个out_channels)

strides: 卷积时的步长,是一个长度为4的一维张量。官网给的解释是默认为“NHWC”,即shape是[batch, height, width, channels], 分别代表各个方向的卷积步长。一般batch和channel赋值1,即strides=[1, height, width,1 ]。(个人认为因为是按批处理,以及按照通道挨个处理,所以是1,height和width随意,一般情况下纵向和横向的步长一致)

padding:代表是否外圈补0。padding赋值一个字符串,“SAME”或“VALID”, “SAME” 代表补0。补0规则是(亲测): 假设filter的宽度是F, input的宽度是W, 如果F-1是偶数, 则上下左右各补(F-1)/2个0, 如果是奇数,则上和左补(F-1)/2个0, 下和右补(F-1)/2+1个0, 如下图:

补零规则

对于tf.nn.conv2d(), 无论filter的size是多大,只要步长为1,最终特征图的size和input的size相同,如果步长为n,补0后input的宽度为W, 则特征图宽度= (W-n)/n+1

测试:

假设有两批数据,大小是3*3,通道数为2。做4次卷积,每个卷积核的大小是3*3,通道数是2。

测试代码

input:

输入张量

第一批数据的有两个通道的矩阵,实际计算格式如下图:

第一批数据

filter1

卷积核,每一列数据代表一个卷积核

result is 

每列数据代表一个输出

列入第一批数据与第一个卷积核计算得到一个输出,数据格式需要转换一下

计算的时候四舍五入,最终output和result不完全一样,但误差很小

相关文章

网友评论

      本文标题:tf.nn.conv2d()笔记

      本文链接:https://www.haomeiwen.com/subject/gnxrfctx.html