【发布时间】:2017-08-01 17:14:20
【问题描述】:
【问题讨论】:
-
我投票结束这个问题,因为它属于datascience.stackexchange.com
标签: neural-network deep-learning conv-neural-network
【问题讨论】:
标签: neural-network deep-learning conv-neural-network
不,4096 是该层输出的维度,而输入的维度是 13x13x256。如图所示,两者不必相等。
【讨论】:
池化层的输出大小为
output = (input size - window size) / (stride + 1)
在上述情况下,输入大小为 13,大多数池化实现添加了额外的填充层,以保持计算中的边界像素,因此输入大小将变为 14。
最常见的窗口大小和步幅是 W = 2 和 S = 2 所以把它们放在公式中
output = (14 - 2) / (2 + 1)
output = 12 / 3
output = 4
现在将生成 256 个 4x4 大小的特征图,将其展平即可得到
flatten = 4 x 4 x 256
flatten = 4096
希望这能回答你的问题。
【讨论】:
如果我是正确的,您是在问为什么4096x1x1 层要小得多。
那是因为它是一个全连接层。最后一个最大池化层的每个神经元(=256*13*13=43264 神经元)都连接到全连接层的每个神经元。
这是一个 ALL to ALL 连接神经网络的例子: 如您所见,layer2 大于 layer3。这并不意味着他们无法连接。
最后一个最大池化层没有转换->最大池化层中的所有神经元都与下一层的所有4096个神经元连接。
“密集”操作只是意味着计算所有这些连接(= 4096 * 43264 个连接)的权重和偏差,并添加神经元的偏差来计算下一个输出。
它的连接方式与 MLP 相同。
但为什么是 4096?没有推理。这只是一个选择。可能是 8000,也可能是 20,这取决于什么最适合网络。
【讨论】:
你是对的,最后一个卷积层有256 x 13 x 13 = 43264 神经元。但是,stride = 3 和 pool_size = 2 有一个最大池化层。这将产生大小为256 x 6 x 6 的输出。您将其连接到一个全连接层。为了做到这一点,您首先必须展平输出,它将形成 - 256 x 6 x 6 = 9216 x 1。为了将9216 神经元映射到4096 神经元,我们引入了9216 x 4096 权重矩阵作为密集/全连接层的权重。因此,w^T * x = [9216 x 4096]^T * [9216 x 1] = [4096 x 1]。简而言之,每个9216 神经元将连接到所有4096 神经元。这就是为什么该层被称为密集层或全连接层的原因。
正如其他人在上面所说的那样,对于为什么应该是 4096 没有硬性规定。密集层只需要有足够数量的神经元才能捕获整个数据集的可变性。正在考虑的数据集 - ImageNet 1K - 相当困难,有 1000 个类别。所以4096 神经元一开始似乎并不过分。
【讨论】:
9216 x 1 到4096 x 1 部分特别有帮助
9216 x 4096 矩阵是您问题的答案。我也在我的回答中描述了这一点。
我会用图片来展示,看下面的网络图片Alexnet
层256 * 13 *13 将执行max pooling 运算符然后它将是256 * 6 * 6=9216。然后将被展平为连接到 4096 全连接网络,因此参数将为 9216 * 4096。您可以在下面的 excel 中看到所有计算的参数。
引用:
https://www.learnopencv.com/understanding-alexnet/
https://medium.com/@smallfishbigsea/a-walk-through-of-alexnet-6cbd137a5637
【讨论】: