Python theano.tensor.nnet.conv.conv2d的输出大小

Python theano.tensor.nnet.conv.conv2d的输出大小,python,theano,Python,Theano,目前在教程和其他地方广泛使用的函数形式如下: 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,

目前在教程和其他地方广泛使用的函数形式如下:

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_形状设为[20,1,7,7],即内核数为20,每个7 X 7,“1”代表什么?我的图像形状是[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。对于第二个问题中的其他卷积层,它必须等于前一层生成的输出数

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


实际上,你能解释一下你是如何得到[100,20,26,26]的输出张量的吗?这正是我正在努力解决的问题。我认为卷积是一个7x7形状的滤波器,它跨越输入图像,我认为输出张量是100x1x84-7x84-7。。。非常感谢您的指点!抱歉,如果这看起来是一个非常基本的问题,那么为什么要总结整个结果呢?这似乎是我读过的每一个论坛/论文中的现状,原因还不清楚。与OP相同,我的印象是,当生成n个特征贴图时,下一层会依次对其中的每一个进行卷积。有什么建议可以帮助我理解这背后的理论吗?我想这是一个标准的实践,已经证明对于eg对象识别来说,在什么类型的功能允许你学习方面是有效的。如果你愿意,你也不能这样做。例如,散射变换不能做到这一点。现在或将来可能会有一两篇论文表明,你不一定需要这些来了解你的反馈: