我目前正在按照TensorFlow的多层卷积网络教程进行学习。
在各个层中,权重初始化如下:
-
第一卷积层:
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])
所以我对我们如何知道上述权重变量的形状?产生了疑问
是否有数学方法来确定它们的形状?
回答:
答案在同一页面上进行了解释:
卷积将为每个5×5的区域计算32个特征。其权重张量的形状将是[5, 5, 1, 32]
并没有涉及复杂的数学计算,但这些术语需要解释
- 卷积核的大小是
5X5
。这意味着有一个5X5
的矩阵通过在输入图像上移动来与图像进行卷积。查看这个链接,了解一个小的5X5
矩阵如何在一个28X28
的图像上移动,并与图像矩阵的不同单元格相乘。这给出了[5, 5, 1, 32]
的前两个维度 - 输入通道的数量是
1
。这些是黑白图像,因此只有一个输入通道。大多数彩色图像有3个通道,所以在其他处理图像的卷积网络中可能会看到3
。确实,对于第二层,W_conv2
,输入通道的数量是32
,与第一层的输出通道数量相同。 - 权重矩阵的最后一个维度可能是最难想象的。想象你的
5X5
矩阵,并复制它32次!这32个东西被称为通道
。为了完成讨论,这32个5X5
矩阵中的每一个都用随机权重初始化,并在网络的前向/后向传播过程中独立训练。更多的通道可以学习图像的不同方面,从而为你的网络提供额外的能力。
如果你总结这三点,你会得到第一层的所需维度。后续层是扩展 – 前两个维度是卷积核的大小(在本例中为5X5)。第三个维度等于输入通道的尺寸,等于前一层的输出通道尺寸(32,因为我们声明第一层的输出通道为32)。最后一个维度是当前层的输出通道尺寸(64,对于第二层来说更大!同样,保持大量独立的5X5核有帮助!)。
最后,关于最后两层:最终的全连接层是唯一涉及一些计算的部分:
- 对于每个卷积层,最终尺寸 = 初始尺寸
- 对于尺寸为kXk的池化层,最终尺寸 = 初始尺寸 / k
所以,
- 对于conv1,尺寸保持
28 X 28
- pool1将尺寸减小到
14 X 14
- 对于conv2,尺寸保持
14 X 14
- pool2将尺寸减小到
7 X 7
当然,由于conv2,我们有64
个通道 – 池化不会影响它们。因此,我们得到最终的全连接输入7X7X64
。然后我们创建1024
个全连接隐藏层,并为10
个数字添加10
个输出类别。