我正在看theano的API,
theano.tensor.nnet.conv2d(input, filters, input_shape=None, filter_shape=None, border_mode='valid', subsample=(1, 1), filter_flip=True, image_shape=None, **kwargs)
当filter_shape
是(num_filter, num_channel, height, width)
的元组时,我对此感到困惑,因为这不是由在图像上滑动滤镜窗口时的步幅决定的滤镜数量吗?我怎么能像这样指定过滤器编号呢?如果它是由参数stride (如果有)计算的,对我来说是合理的。
此外,我也混淆了术语特征图,它是每一层的神经元吗?批次大小如何?它们是如何关联的?
发布于 2016-03-27 03:56:22
过滤器的数量就是神经元的数量,因为每个神经元对该层的输入执行不同的卷积(更准确地说,神经元的输入权重来自卷积核)。
特征图是应用过滤器的结果(因此,你有和过滤器一样多的特征图),它的大小是过滤器和步幅的窗口/内核大小的结果。
下面的图片是我能找到的最好的从高层次上解释这个概念的图片:
请注意,对输入图像应用了两个不同的卷积滤波器,从而产生了两个不同的特征图(滤波器的输出)。每个特征图的每个像素都是卷积层的输出。
例如,如果你有28x28的输入图像和一个具有20个7x7滤波器和步长1的卷积层,那么你将在这个层的输出处获得20个22x22的特征图。请注意,这是作为宽度=高度= 22和深度= RGB = 20的体积呈现给下一层的。您可以使用相同的表示在num_channels图像上训练CNN,例如来自CIFAR10数据集的图像,它将是32x32x3体积(卷积仅应用于2个空间维度)。
编辑:在我想要澄清的评论中似乎有一些混乱。首先,没有神经元。神经元只是神经网络中的一个比喻。也就是说,“卷积层中有多少个神经元”不能客观地回答,而是相对于你对卷积层执行的计算的看法。在我看来,过滤器是扫描图像的单个神经元,为每个位置提供不同的激活。在我的视图中,由单个神经元/过滤器在多个位置生成整个特征图。评论员们似乎有另一种观点,与我的观点一样有效。他们将每个滤波器视为用于卷积运算的一组权重,并将图像中每个受关注位置的一个神经元共享由滤波器定义的同一组权重。请注意,这两个视图在功能上(甚至在根本上)是相同的,因为它们使用相同的参数、计算和产生相同的结果。因此,这不是问题。
发布于 2019-05-16 07:53:22
关于过滤器的最佳数量是多少,没有正确的答案。这在很大程度上取决于(图像)数据的类型和复杂性。随着时间的推移,在重复处理类似类型的数据集后,可以从经验中学习适当数量的特征。一般来说,你想要在图像中捕获的特征越多(并且可能是可用的),CNN中所需的滤波器数量就越多。
发布于 2018-07-17 02:03:04
过滤器的数量是一个可以调整的超参数。卷积层中神经元的数量等于该层输出的大小。对于图像,它是特征映射的大小。
https://stackoverflow.com/questions/36243536
复制