neural-network - 过滤器如何在 CNN 的第一层中穿过 RGB 图像?

标签 neural-network conv-neural-network convolution channels vgg-net

我正在看这个图层的打印输出。
我意识到,这显示了输入/输出,但与如何处理 RGB channel 无关。
enter image description here
如果您查看 block1_conv1,它会显示“Conv2D”。但是如果输入是 224 x 224 x 3,那么这不是 2D。
我的更大、更广泛的问题是,在整个训练这样的模型的过程中如何处理 3 个 channel 输入(我认为它是 VGG16)。 RGB channel 是否在某个时刻组合(相加或连接)?何时何地?为此需要一些独特的过滤器吗?或者模型是否从头到尾分别跨越不同的 channel /颜色表示?

最佳答案

2D 卷积的“2D”部分不是指卷积输入的维度,也不是滤波器本身的维度,而是指允许滤波器移动的空间(仅限 2 个方向)。另一种思考方式是每个 RGB channel 分别有自己的 2D 阵列过滤器,并在最后添加输出。

does the model run across the different channel/color representations separately from end to end?


实际上,它分别跨每个 channel 执行此操作。例如,第一个 Conv2D layer 分别接收 3 224x224 层中的每一层,然后对每一层应用不同的 2D-array 过滤器。但这并不是跨所有模型层的端到端,仅在卷积步骤期间的层内。
但是,您可能会问,每个 channel 有 64 个卷积滤波器,那为什么没有 3*64 = 192Conv2D 中的 channel 3个 channel 的输出?这提示你的问题

Are the RGB channels combined (summed, or concatenated) at some point?


答案是:是的。在将卷积滤波器分别应用于每一层之后,三个 channel 中的每一个 channel 的值都会相加,如果您已经指定了偏差,那么也会相加。见下图(来自 Dive Into Deep Learning ,在 CC BY-SA 4.0 下):
Dive Into Deep Learning Diagram
这样做的原因(添加了单独的 channel 层)是每个 channel 实际上没有 3 个单独的 2D 阵列过滤器;从技术上讲,只有 1 个 3D 阵列滤波器,它只能在两个方向上移动。你可以把它想象成一个汉堡包:一个 channel (面包)有一个 2D 阵列过滤器,下一个 channel (生菜)有另一个,等等。但是所有的层都堆叠起来并作为一个整体运行,所以过滤器的权重一次加在一起。没有必要为此添加特殊的权重或过滤器,因为权重在卷积步骤中已经存在(这只是将两个拟合参数相乘,也可能是一个)。

关于neural-network - 过滤器如何在 CNN 的第一层中穿过 RGB 图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62493987/

相关文章:

python - scipy.signal.convolve 给出的结果与手动计算卷积积分不同

python - 在神经网络中 : accuracy improvement after each epoch is GREATER than accuracy improvement after each batch. 为什么?

python - 在 tensorflow 中连接两个 RNN 状态

neural-network - 在 Keras (Theano) 的卷积层中使用均匀的内核大小进行填充

neural-network - 在pytorch中执行卷积(不互相关)

python - 在pytorch中创建自定义数据加载器时更改图像的尺寸

python-2.7 - Theano 在计算梯度方面的效率/智能如何?

machine-learning - keras 在优化过程中卡住了

python - 在 tensorflow 中实现 3D 卷积的最佳方式是什么?

Python:一维数组循环卷积