machine-learning - CNN中的滤波器数量是多少?

标签 machine-learning neural-network theano convolution

我目前正在查看 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(如果有的话)来计算的话,对我来说是合理的。

另外,我也对特征图这个术语感到困惑,它是每一层的神经元吗?批量大小如何?它们之间有何关联?

最佳答案

滤波器的数量就是神经元的数量,因为每个神经元对层的输入执行不同的卷积(更准确地说,神经元的输入权重形成卷积核)。

特征图是应用过滤器的结果(因此,您拥有与过滤器一样多的特征图),其大小是过滤器的窗口/内核大小和步幅的结果。

下图是我能找到的从高层次解释这个概念的最佳图片: enter image description here 请注意,2 个不同的卷积滤波器应用于输入图像,从而产生 2 个不同的特征图(滤波器的输出)。每个特征图的每个像素都是卷积层的输出。

例如,如果您有 28x28 输入图像和具有 20 个 7x7 滤波器且步幅为 1 的卷积层,则您将在该层的输出处获得 20 个 22x22 特征图。请注意,这将作为宽度 = 高度 = 22 且深度 = num_channels = 20 的体积呈现给下一层。您可以使用相同的表示在 RGB 图像(例如来自 CIFAR10 数据集的图像)上训练 CNN,这将是32x32x3 体积(卷积仅应用于 2 个空间维度)。

编辑:我想澄清的评论中似乎存在一些困惑。首先,没有神经元。神经元只是神经网络中的一个比喻。也就是说,“卷积层中有多少个神经元”无法客观回答,而是与您对该层执行的计算的看法有关。在我看来,过滤器是一个扫描图像的单个神经元,为每个位置提供不同的激活。在我看来,整个特征图是由单个神经元/过滤器在多个位置生成的。评论者似乎有另一种观点,与我的观点一样有效。他们将每个过滤器视为一组用于卷积运算的权重,并将一个神经元视为图像中每个参与位置,所有神经元都共享由过滤器定义的同一组权重。请注意,这两个 View 在功能上(甚至从根本上)是相同的,因为它们使用相同的参数、计算并产生相同的结果。因此,这不是问题。

关于machine-learning - CNN中的滤波器数量是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36243536/

相关文章:

python - numpy 属性错误 : with theano module 'numpy.core.multiarray' has no attribute _get_ndarray_c_version

Java Spark Streaming JSON解析

python - Tensorflow:使用神经网络对正面或负面短语进行分类

python - 如何使用多维输入训练 Keras LSTM?

python - 使用 Theano 进行线性回归 - 维度不匹配

python - Tensorflow 优化器 - 多个损失值传递给最小化()?

machine-learning - 我们可以使用多少种距离函数?

python-2.7 - 如何在pytorch中为不同层设置不同的学习率?

python - 如何在scikit SVC中打印相应的特征权重?

python - Keras LSTM 在多类别分类中仅预测 1 个类别 - 如何修复?