theano.tensor.nnet.conv.conv2d 的输出大小
The output size of theano.tensor.nnet.conv.conv2d
当前在教程和其他地方广泛使用的函数的形式为:
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 ]
,即核数为 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 ]
并生成形状为 [ 100 ,50 ,11 ,11 ]
的输出。我似乎有点理解这个操作,除了,如果我想使用一个“50”过滤器层,每个过滤器层都处理之前生成的 20 个特征图,我不应该总共生成 1000 个特征图而不是只生成 50 个特征图吗?重申一下我的问题,我有一堆 20 个特征图,每个特征图 运行 50 个卷积核,我的输出形状不应该是 [100, 1000, 11, 11]
而不是 [ 100, 50 , 11, 11]
吗?
回答您的问题:
其中1
代表输入通道数。正如您似乎在使用灰度图像一样,这就是一个。对于彩色图像,它可以是 3。对于第二个问题中的其他卷积层,它必须等于前一层生成的输出数。
在 [100, 20, 26, 26]
的输入信号上使用大小为 [50, 20, 5, 5]
的滤波器实际上也是您第一个问题的一个很好的例子。这里有 50 个形状为 [20, 5, 5]
的过滤器。每个图像的形状都是[20, 26, 26]
。卷积每次都使用所有 20 个通道:滤波器 0 应用于图像通道 0,滤波器 1 应用于图像 1,然后将整个结果相加。这有意义吗?
当前在教程和其他地方广泛使用的函数的形式为:
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 ]
,即核数为 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 ]
并生成形状为[ 100 ,50 ,11 ,11 ]
的输出。我似乎有点理解这个操作,除了,如果我想使用一个“50”过滤器层,每个过滤器层都处理之前生成的 20 个特征图,我不应该总共生成 1000 个特征图而不是只生成 50 个特征图吗?重申一下我的问题,我有一堆 20 个特征图,每个特征图 运行 50 个卷积核,我的输出形状不应该是[100, 1000, 11, 11]
而不是[ 100, 50 , 11, 11]
吗?
回答您的问题:
其中
1
代表输入通道数。正如您似乎在使用灰度图像一样,这就是一个。对于彩色图像,它可以是 3。对于第二个问题中的其他卷积层,它必须等于前一层生成的输出数。在
[100, 20, 26, 26]
的输入信号上使用大小为[50, 20, 5, 5]
的滤波器实际上也是您第一个问题的一个很好的例子。这里有 50 个形状为[20, 5, 5]
的过滤器。每个图像的形状都是[20, 26, 26]
。卷积每次都使用所有 20 个通道:滤波器 0 应用于图像通道 0,滤波器 1 应用于图像 1,然后将整个结果相加。这有意义吗?