我目前看到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(如果有的话)来计算的话,对我来说是合理的。
另外,我也对特征图这个术语感到困惑,它是每一层的神经元吗?批量大小如何?它们是如何相关的?
滤波器的数量就是神经元的数量,因为每个神经元对层的输入执行不同的卷积(更准确地说,神经元的输入权重形成卷积核)。
特征图是应用过滤器的结果(因此,您拥有与过滤器一样多的特征图),其大小是过滤器的窗口/内核大小和步幅的结果。
The following image was the best I could find to explain the concept at high level:
Note that 2 different convolutional filters are applied to the input image, resulting in 2 different feature maps (the output of the filters). Each pixel of each feature map is an output of the convolutional layer.
例如,如果您有 28x28 输入图像和一个具有 20 个 7x7 滤波器且步幅为 1 的卷积层,那么您将在该层的输出处获得 20 个 22x22 特征图。请注意,这将作为宽度 = 高度 = 22 且深度 = num_channels = 20 的体积呈现给下一层。您可以使用相同的表示在 RGB 图像(例如来自 CIFAR10 数据集的图像)上训练 CNN,这将是32x32x3 体积(卷积仅应用于 2 个空间维度)。
编辑:我想澄清的评论中似乎存在一些混乱。第一的,没有神经元。神经元只是神经网络中的一个比喻。也就是说,“卷积层中有多少个神经元”无法客观回答,而是与您对该层执行的计算的看法相关。在我看来,过滤器是一个神经元扫过图像,提供不同的激活对于每个位置。在我看来,整个特征图是由单个神经元/过滤器在多个位置生成的。评论者似乎有另一种观点,与我的观点一样有效。他们将每个过滤器视为一组用于卷积运算的权重,并将一个神经元视为图像中每个参与位置,所有神经元都共享由过滤器定义的同一组权重。请注意,这两个视图都是功能上(甚至根本上)相同,因为它们使用相同的参数、计算并产生相同的结果。因此,这不是问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)