实验:学习速率衰减
通过两个中间层、三个中间层或四个中间层,如果将迭代次数设为5000次或更高,那么可以获得接近98%的精度。
但你会发现结果不是很稳定。
这些曲线上下波动,测试集上的准确度上下波动,波动幅度约为百分之一。
这意味着即使学习率为0.003,我们也走得太快了。
但是,我们不能仅仅把学习率除以十,否则训练过程就变得无比漫长。
一个可行的解决方案是:
快速启动,并将学习速率渐渐指数衰减(例如衰减到0.0001)。
这一小小的改动带来的影响是惊人的。
你看,大部分的噪声消失了,测试集的精度现在以比较平稳的方式维持在98%以上。
顺便看看训练精度曲线。
现在它在几个阶段内都能达到100%(一个阶段=500次迭代=在所有训练图像上训练一次)。
我们第一次完美地学习到如何识别训练图像。
请将 学习速率衰减 添加到代码中。
在您的模型中,使用以下公式代替之前在 AdamOptimizer 中使用的固定学习率:
lr = 0.0001 + tf.train.exponential_decay(0.003, step, 2000, 1/math.e)
它使学习率指数衰减,从0.003到0.0001。
您需要在每次迭代时通过feed_dict参数将“step”参数传递给模型。
为此,需要一个新的占位符:
step = tf.placeholder(tf.int32)
该解决方案可以在文件mnist_2.1_five_layers_relu_lrdecay.py中找到。
如果你卡住了就用它。