我正在看这个图层的打印输出。
我意识到,这显示了输入/输出,但与如何处理 RGB channel 无关。
如果您查看 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 = 192
? Conv2D
中的 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 下):
这样做的原因(添加了单独的 channel 层)是每个 channel 实际上没有 3 个单独的 2D 阵列过滤器;从技术上讲,只有 1 个 3D 阵列滤波器,它只能在两个方向上移动。你可以把它想象成一个汉堡包:一个 channel (面包)有一个 2D 阵列过滤器,下一个 channel (生菜)有另一个,等等。但是所有的层都堆叠起来并作为一个整体运行,所以过滤器的权重一次加在一起。没有必要为此添加特殊的权重或过滤器,因为权重在卷积步骤中已经存在(这只是将两个拟合参数相乘,也可能是一个)。
关于neural-network - 过滤器如何在 CNN 的第一层中穿过 RGB 图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62493987/