目前正在努力通过我的方式卷积网络的 Tensorflow MNIST 教程 https://www.tensorflow.org/get_started/mnist/pros#first_convolutional_layer我需要一些帮助来理解该死的张量的维度。
所以我们有图像28x28
像素大小。
卷积将为每个 5x5 patch 计算 32 个特征。
让我们暂时接受这一点,稍后再问自己为什么是 32 个功能以及为什么是 5x5 补丁。
它的权重张量的形状为[5, 5, 1, 32]
。前两个维度是块大小,接下来是输入通道数,最后一个是输出通道数。
W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])
如果你这么说的话...
为了应用该层,我们首先将 x 重塑为 4d 张量,第二维和第三维对应于图像的宽度和高度,最终维度对应于颜色通道的数量。
x_image = tf.reshape(x, [-1,28,28,1])
好吧,现在我迷路了。
从最后一次重塑来看,我们有
“然而很多”28x28x1
像素“块”是我们的图像。
我想这是有道理的,因为图像是灰度的
然而,如果这是顺序,那么我们的权重张量本质上是五个的集合5x1x32
值的“块”。
The x32
我想,如果我们想推断的话,这是有道理的32
每个补丁的功能
不过,其余的我不太相信。
为什么权重张量看起来像它看起来的那样?
(为了完整性:我们使用它们
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)
where
def conv2d(x,W):
'''
2D convolution, expects 4D input x and filter matrix W
'''
return tf.nn.conv2d(x,W,strides=[1,1,1,1],padding ='SAME')
def max_pool_2x2(x):
'''
max-pooling, using 2x2 patches
'''
return tf.nn.max_pool(x,ksize=[1,2,2,1], strides=[1,2,2,1],padding='SAME')
)