TensorFlow 与深度学习 (12) 卷积网络:实验

为了将我们的代码转化为卷积模型,我们需要为卷积层定义适当的权重张量,然后将该卷积层添加到模型中。

我们已经见过到卷积层需要以下形式的权重张量。下面代码是用 TensorFlow 语法来对其初始化:

1
2
W = tf.Variable(tf.truncated_normal([4, 4, 3, 2], stddev=0.1))
B = tf.Variable(tf.ones([2])/10) # 2 is the number of output channels

TensorFlow 中,使用 tf.nn.conv2d 函数实现卷积层,该函数使用提供的权重在两个方向上扫描输入图片。这仅仅是神经元的加权和部分,你还需要添加偏置,并将加权和传给激活函数。

1
2
3
stride = 1  # output is still 28x28
Ycnv = tf.nn.conv2d(X, W, strides=[1, stride, stride, 1], padding='SAME')
Y = tf.nn.relu(Ycnv + B)

不要太在意 stride 的复杂语法,欲知详情请查文档。这里的 padding 策略是复制边缘的像素。所有的数字都在一个统一的背景下,所以这仅仅扩展了背景,不应该添加任何不需要的形状。

现在轮到你了。修改你的模型并将其转化为卷积模型。你可以使用上图中的值来修改它,你可以保留学习速率衰减,但是务必先移除 dropout。

解答可以在 mnist_3.0_convolutional.py 找到。如果卡住可以看它。

你的模型的准确率应该会超过 98%,并且最终很接近 99%。眼看目标就要实现,我们不能停下!看看测试的交叉熵曲线,是不是想到了一个解决方案?