当前在教程和其他地方广泛使用的函数的形式为:
conv_out = conv2d(
input= x, # some 4d tensor
filters= w, # some shared variable
filter_shape= [ nkerns, stack_size, filter_height, filter_width ],
image_shape= [ batch_size, stack_size, height, width ]
)
如果对于CNN的第一层,我有filter_shape
作为[ 20, 1 , 7, 7 ]
其是kernals为20的数目,每个7 X 7,什么是“1”代表什么?我image_shape
是[100, 1, 84, 84 ]
。
现在,该卷积输出一个[ 100, 20, 26, 26]
我理解的形状张量。现在,我的下一层将使用参数filter_shape
= [50, 20, 5 ,5 ]
,image_shape
=[ 100, 20 ,26, 26 ]
并生成shape的输出[ 100 ,50 ,11 ,11 ]
。我似乎有点理解此操作,除了,如果我要使用'50'滤镜层,每个滤镜层都可以处理之前生成的20个特征图,我是否应该总共生成1000个特征图而不是仅生成50个特征图?重申一下我的问题,我有一堆20个特征贴图,每个特征贴图运行50个卷积核,我的输出形状[100, 1000, 11, 11]
不是[ 100, 50 , 11, 11]
吗?
要回答您的问题:
的1
代表输入信道的数目。正如您似乎正在使用灰度图像一样,这就是其中之一。对于彩色图像,可以为3。对于第二个问题中的其他卷积层,它必须等于上一层生成的输出数量。
对于第一个问题,[50, 20, 5, 5]
在输入信号上使用大小滤波器[100, 20, 26, 26]
实际上也是一个很好的例子。您这里有50个形状过滤器[20, 5, 5]
。每个图像都是形状[20, 26, 26]
。卷积每次都使用所有20个通道:将滤镜0应用于图像通道0,将滤镜1应用于图像1,然后对整个结果求和。那有意义吗?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句