【问题标题】:In CNN network, should input image go to all neurons in first convolution layer (I mean first hidden layer) or not?在 CNN 网络中,输入图像是否应该进入第一个卷积层(我的意思是第一个隐藏层)中的所有神经元?
【发布时间】:2020-06-26 10:00:24
【问题描述】:

我是 CNN 主题的新手,我有一个基本问题是关于输入图像与第一个卷积层中的神经元之间的映射。

我的问题是: 输入图像是否应该进入第一个卷积层(我的意思是第一个隐藏层)中的所有神经元?

例如:如果我在 CNN 中的第一个隐藏层为 8 个神经元,那么在这种情况下,完整的输入图像将传递给所有这 8 个神经元,或者仅将输入图像的一组像素传递给每个神经元。

【问题讨论】:

    标签: tensorflow machine-learning deep-learning artificial-intelligence conv-neural-network


    【解决方案1】:

    我不确定您是否理解您的要求,因为除非您正在构建自己的 CNN 实现,否则您不会过多关注卷积层中的神经元数量。

    回答您的问题 - 不,第一个卷积层中的每个神经元仅连接到其自己的感受野中的像素(由内核大小给出),并且相同的逻辑也适用于下一个卷积层,除了现在它们已连接到下层神经元的感受野。

    例如:如果我在 CNN 中的第一个隐藏层为 8 个神经元

    你怎么知道它有 8 个神经元?除非您正在执行一些低级 CNN 编程,否则您不指定神经元的数量。您需要的神经元数量通常由kernel sizestridepadding 类型和您选择使用的filters 数量的组合给出。这 4 件事(连同图像的输入大小)可以准确地告诉您需要多少神经元。

    例如,在 Keras 中(因为你已经用 tensorflow 标记了这个问题)你可能会看到像这样的卷积层:

    keras.layers.Conv2D(filters=128, kernel_size=3, strides=1, activation="relu",
                        input_shape=(100, 100, 1))
    

    如您所见,您没有在此处指定神经元数量之类的任何内容(至少不是直接指定)。在此设置下,您最终会得到宽度和高度被裁剪 2 的输出(由于默认填充),因此该层的输出形状为 (128, 98, 98)(从技术上讲,它的形状为 (None, 128 , 98, 98) 其中 None 是批量大小)。如果您将其展平并将输出馈送到单个神经元(假设在一个密集层中),那么您最终会在这两层之间得到 128 * 98 * 98 = 1,229,313 个权重。

    因此,对于密集层和卷积层之间的类比,上述具有 128 个滤波器连接到一个输出神经元的卷积层类似于具有连接到一个输出神经元的 1,229,313 个神经元的密集层。

    【讨论】:

    • 感谢您的友好回复。我仍然不清楚内核/过滤器和神经元之间关于卷积层的关系是什么。我知道填充和跨步的概念,但我不清楚的是,当第一个构成层中的神经元仅连接到其自己的感受野中的像素(由内核大小给出)时,然后步长操作点自内核大小和连接的像素大小相同。
    • 内核大小和连接像素大小确实是相同的,但是如果增加步幅值,则该层中的神经元数量会减少。因此,鉴于您不更改过滤器的数量,您正在减少可训练参数(权重)的数量。至于神经元和过滤器之间的关系,每个神经元每个过滤器产生一个输出,因此如果你有 128 个过滤器,一个神经元将产生 128 个不同的输出。但是您可以拥有任意数量的过滤器。这个数字不取决于您拥有的神经元数量 - 但复杂性可能会爆炸。
    • 感谢您的回复。我现在明白了,过滤器的数量与卷积层中的神经元数量无关。但是,假设我有大小为 3*3*1 的输入图像,内核大小为 2*2 并且没有填充。这意味着卷积层中的每个神经元都得到输入图像的一部分,大小为 2*2 像素,现在每个神经元对这部分输入图像执行卷积操作。由于输入图像部分和内核大小相同,我们将得到一个输出。但是如果我们执行一步跨步操作(stride = 1),我们将跨越部分输入图像的边界,这是我们不需要的?
    • 还有一个问题,输入图像的一部分是如何映射到每个神经元的?我的意思是我怎么知道输入图像的哪个部分映射到哪个神经元。请举例说明,我真的被困在这里。提前致谢
    • Stride = 1 表示您一次将内核滑动一个像素。让我们考虑x 轴和像素 1、2 和 3。第一个神经元将看到像素 1 和 2,然后内核移动一个像素,下一个神经元将看到像素 2 和 3。如果您使用valid 填充。在same 填充的情况下,第一个神经元将看到像素 1 和 2,第二个神经元将看到像素 2、3,第三个神经元将看到像素 3 和(一个零填充)。在第二种情况下,您最终会得到与图像相同大小的输出 (3 x 3 x 1)。在前一种情况下,输出为 (2 x 2 x 1)
    猜你喜欢
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 2018-01-20
    • 2015-04-02
    • 2020-05-26
    • 2013-04-21
    • 2016-06-02
    相关资源
    最近更新 更多