我目前正在关注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])
所以我怀疑我们知道上述重量变量的形状如何?
他们的数学用于找到它们的形状吗?
答案 0 :(得分:9)
答案在同一页面上解释:
卷积将为每个5x5补丁计算32个特征。它的 重量张量的形状为[5,5,1,32]
没有涉及数学的说法,但这些术语需要解释
5X5
。这意味着通过在图像周围移动输入图像,存在卷积的5X5
矩阵。检查this link,了解小5X5
矩阵如何在28X28
图像上移动,并将图像矩阵的不同单元格与其自身相乘。这为我们提供了[5, 5, 1, 32]
1
。这些是BW图像,因此是一个输入通道。大多数彩色图像有3个通道,所以在其他一些处理图像的卷积网络中需要3
。实际上,对于第二层W_conv2
,输入通道的数量为32
,与第1层的输出通道数相同。5X5
矩阵,并复制它32次!这32件事中的每一件都称为channels
。为了完成讨论,这些32 5X5
矩阵中的每一个都用随机权重初始化,并在网络的前向/反向传播期间独立训练。更多频道可以了解图像的不同方面,从而为您的网络提供额外的电力。如果总结这3个点,则得到第1层所需的尺寸。后续图层是扩展名 - 在这种情况下,前两个维度是内核大小(5X5)。第三维等于输入通道的大小,其等于前一层的输出通道的大小。 (32,因为我们声明了第1层的32个输出通道)。最终维度是当前层的输出通道的大小(64,对于第二层甚至更大!再次,保持大量独立的5X5内核有帮助!)。
最后,最后两层:最后的密集层是唯一涉及一些计算的东西:
所以,
28 X 28
14 X 14
14 X 14
7 X 7
当然,由于conv2,我们有64
个频道 - 汇集不会影响他们。因此,我们得到7X7X64
的最终密集输入。然后,我们会创建完全连接的1024
隐藏图层,并为10
位数添加10
输出类。