我目前正在关注TensorFlow的Multilayer Convolutional Network教程。在
各层重量初始化如下:
第一卷积层:
W_conv1 = weight_variable([5, 5, 1, 32])
第二层卷积:
W_conv2 = weight_variable([5, 5, 32, 64])
密接层:
W_fc1 = weight_variable([7 * 7 * 64, 1024])
读出层:
W_fc2 = weight_variable([1024, 10])
所以我在中有疑问,我们是如何知道上述权重变量的形状的?
他们有没有用数学来为他们找到形状?
答案在同一页解释:
这里没有涉及数学问题,但这些术语需要解释
5X5
。这意味着存在一个5X5
矩阵,它通过在图像周围移动来与输入图像卷积。查看this link以了解一个小的5X5
矩阵如何在28X28
图像上移动,并将图像矩阵的不同单元与其自身相乘。这给出了[5, 5, 1, 32]
的前两个维度1
。这些是BW图像,因此有一个输入通道。大多数彩色图像都有3个通道,所以在其他一些处理图像的卷积网络中应该有一个3
。实际上,对于第二层W_conv2
,输入通道的数目是32
,与第1层的输出通道数目相同。在5X5
矩阵,复制32次!。这32种东西都被称为channels
。为了完成讨论,这些325X5
矩阵中的每一个都用随机权重初始化,并在网络的前向/后向传播过程中独立地进行训练。更多的频道了解图像的不同方面,从而为您的网络提供额外的能量。在如果你总结这三点,你就得到了第1层所需的尺寸。后续层是一个扩展——在本例中,前两个维度是内核大小(5X5)。三维尺寸等于输入通道的大小,等于上一层输出通道的大小。(32,因为我们声明了第1层的32个输出通道)。最终尺寸为当前层输出通道的大小(64,第二层更大!)!。同样,保留大量独立的5X5内核会有帮助!)。在
最后,最后两层:最后的致密层是唯一需要计算的:
所以
28 X 28
14 X 14
14 X 14
7 X 7
当然,我们有
64
通道,因为conv2-pooling不会影响它们。因此,我们得到了7X7X64
的最终密集输入。然后我们创建完全连接的1024
隐藏层,并为10
数字添加10
输出类。在相关问题 更多 >
编程相关推荐