每层VGG进入多少个神经元?

时间:2016-11-03 03:42:14

标签: tensorflow machine-learning conv-neural-network vgg-net

你能告诉我每层进入神经元的数量。我觉得这会提高我对VGG中发生的事情的理解。

让我们在这里使用这段代码来获得具体的东西。

https://github.com/machrisaa/tensorflow-vgg/blob/master/vgg19.py#L46

在这一行中,我看到224x224x3(图像)被输入。在代码中的每一行(每行代表一个图层)之后,该图像的尺寸会发生什么变化?

谢谢你。

2 个答案:

答案 0 :(得分:2)

您发布的调试信息是每个操作/图层输出的尺寸。它与“神经元”的数量有关,但它不一样。

输出尺寸来自哪里?

VGG-19中只有两种类型的图层(不包括softmax和完全连接):

  • 卷积层它们都使用带有步幅1和填充1的3x3滤镜。这意味着输出音量将与输入音量具有相同的宽度和高度(深度等于滤镜数量)。下面参考文献的幻灯片44具有用于在给定输入尺寸和卷积参数的情况下计算输出的公式。
  • 最大泳池层:它们都使用2x2窗口,步幅为2.这意味着输出体积将是输入体积宽度的一半和高度的一半。幻灯片56。

神经元在哪里?

假设我们想将网络解释为一组神经元。每个神经元都有一组权重,用于收集其输入的加权和,然后用非线性变换。

首先,完全连接的层中有神经元:4096 + 4096 + 1000 = 9192个神经元。

其次,卷积层中有神经元。基本上你可以看到每个过滤器都是一个神经元(幻灯片50上有一个很好的例子)。

您可以轻松查找幻灯片71上每个图层的过滤器数量(例如,conv3-64代表64个3x3过滤器)。对于VGG-19,我们有2 * 64 + 2 * 128 + 4 * 256 + 2 * 4 * 512 = 5504个神经元。

所有这些说法,实际上通常人们会用参数(即权重)和层数来衡量网络的大小。 VGG-19有1.44亿个参数,特别是大。为了比较,训练集有130万个例子。

参考:http://cs231n.stanford.edu/slides/winter1516_lecture7.pdf

答案 1 :(得分:0)

我找到了一种方法来检测代码,并找出每个图层的大小。这给了我很多清晰度。如果你很好奇,我在tensorflow中使用了交互式会话功能来完成这项工作。

conv1_1 [100,224,224,64]

conv1_2 [100,224,224,64]

POOL1 [100,112,112,64]

conv2_1 [100,112,112,128]

conv2_2 [100,112,112,128]

POOL2 [100,56,56,128]

conv3_1 [100,56,56,256]

conv3_2 [100,56,56,256]

conv3_3 [100,56,56,256]

conv3_4 [100,56,56,256]

pool3 [100,28,28,256]

conv4_1 [100,28,28,512]

conv4_2 [100,28,28,512]

conv4_3 [100,28,28,512]

conv4_4 [100,28,28,512]

池4 [100,14,14,512]

conv5_1 [100,14,14,512]

conv5_2 [100,14,14,512]

conv5_3 [100,14,14,512]

conv5_4 [100,14,14,512]

pool5 [100,7,7,512]

FC6 [100,4096]

relu6 [100,4096]

FC7 [100,4096]

relu7 [100,4096]

FC8 [100,1000]

概率 [100,1000]