了解caffe中的卷积层深度

Understanding convolutional layer depth in caffe

我是 caffe 的新手,我用 64 个 7x7 的特征图训练了一个卷积神经网络,当我得到一个过滤器的权重时,y 得到一个 7x7 矩阵。然而,我的第二层有 32 个 3x3 的特征图,当我得到任何过滤器的权重时,我得到了第二层任何过滤器的 3x3 内核的 64 个矩阵。 有人知道为什么吗?

TL;DR:

The filters of a convolutional layer must matches the number of channels of that layer's input.

让我们看一个例子:

假设您的网络接收尺寸为 128x128(高度和宽度均为 128 像素)的 3 通道彩色图像(例如 RGB)作为输入。因此,您的第一个卷积层(我们称之为 conv1)的输入将是 3x128x128(通道 x 宽度 x 高度)。

现在假设 conv1 有 64 个大小为 7x7 的过滤器。为了处理来自输入的所有值,单个过滤器必须与馈送到该层的输入通道的数量相匹配(否则在卷积过程中不会考虑某些通道)。所以它也必须是 3 通道滤波器,最后,我们将有 64 个尺寸为 3x7x7 的滤波器 conv1.

Conv1 将输出尺寸为 64x128x128 的图(过滤器数量 X 重量 X 高度)。如果您不清楚,请查看 this demo [1].

然后下一个卷积层 (conv2) 的过滤器也必须匹配它们的维度才能匹配输出。例如,32 个大小为 64x5x5 的过滤器(对于空间维度为 5x5 的过滤器)。等等...

(为了简单起见,我们假设我们 zero-pad 卷积之前的输入。Zero-padding 是我们对输入进行卷积的 "border" 个零地图。这意味着空间维度,即宽度和高度,不会改变。如果没有填充,则输出将小于输入。例如,对于输入大小为 128x128 的 7x7 过滤器,输出最终将是大小为 125x125。空间维度的减少等于 floor(filter_size / 2) )

[1] CS231n Convolutional Neural Networks for Visual Recognition