【发布时间】:2018-08-20 19:53:13
【问题描述】:
我是 caffe 新手,我已经训练了一个具有 64 个 7x7 特征图的 concolutional 神经网络,当我得到一个过滤器的权重时,我得到一个 7x7 矩阵。然而,我的第二层有 32 个 3x3 的特征图,当我获得任何过滤器的权重时,我会为第二层的任何过滤器获得 64 个 3x3 内核矩阵。 有人知道为什么吗?
【问题讨论】:
我是 caffe 新手,我已经训练了一个具有 64 个 7x7 特征图的 concolutional 神经网络,当我得到一个过滤器的权重时,我得到一个 7x7 矩阵。然而,我的第二层有 32 个 3x3 的特征图,当我获得任何过滤器的权重时,我会为第二层的任何过滤器获得 64 个 3x3 内核矩阵。 有人知道为什么吗?
【问题讨论】:
TL;DR:
卷积层的过滤器必须与 该层输入的通道。
假设您的网络接收尺寸为 128x128(高度和宽度为 128 像素)的 3 通道彩色图像(例如 RGB)作为输入。因此,您的第一个卷积层(我们称之为 conv1)的输入将是 3x128x128(通道 x 宽 x 高)。
现在假设 conv1 有 64 个大小为 7x7 的过滤器。为了处理来自输入的所有值,单个过滤器必须与馈送到该层的输入通道的数量相匹配(否则在卷积期间将不考虑某些通道)。所以它也必须是 3 通道过滤器,最终我们将有 64 个尺寸为 3x7x7 的过滤器用于 conv1。
Conv1 将输出尺寸为 64x128x128 的地图(过滤器数量 X 重量 X 高度)。如果您不清楚,请查看this demo [1]。
然后来自下一个 conv 层 (conv2) 的过滤器也必须匹配它们的维度以匹配输出。例如,32 个大小为 64x5x5 的过滤器(用于空间尺寸为 5x5 的过滤器)。等等……
(为了简单起见,我们假设我们在卷积之前对输入进行零填充。零填充是我们对输入映射进行卷积的零的“边界”。这意味着空间维度,即宽度和高度不会改变。如果没有填充,则输出将小于输入。例如,对于输入大小为 128x128 的 7x7 滤波器,输出最终将具有大小 125x125。空间维度的减少是等于 floor(filter_size / 2) )
[1]CS231n Convolutional Neural Networks for Visual Recognition
【讨论】: