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 ]
    )
  1. 如果对于 CNN 的第一层,我有 filter_shape 作为 [ 20, 1 , 7, 7 ],即核数为 20,每个 7 X 7,' 1' 代表 ?我的 image_shape[100, 1, 84, 84 ].

  2. 这个卷积现在输出一个我理解的 [ 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. 其中1代表输入通道数。正如您似乎在使用灰度图像一样,这就是一个。对于彩色图像,它可以是 3。对于第二个问题中的其他卷积层,它必须等于前一层生成的输出数。

  2. [100, 20, 26, 26] 的输入信号上使用大小为 [50, 20, 5, 5] 的滤波器实际上也是您第一个问题的一个很好的例子。这里有 50 个形状为 [20, 5, 5] 的过滤器。每个图像的形状都是[20, 26, 26]。卷积每次都使用所有 20 个通道:滤波器 0 应用于图像通道 0,滤波器 1 应用于图像 1,然后将整个结果相加。这有意义吗?