版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
创建新的训练数据:旋转图像
如果思考一下MNIST训练数据,你就会意识到,这是关于人们所书写数字的一个相当丰富的样本集。这里有各种各样、各种风格的书写,有的写得很好,有的写得很糟。
如果我们能够创造更多的变化类型作为样本,会不会有好处呢?如何做到这一点呢?再多收集几千个同类手写数字样本,对我们来说有点不太容易。我们可以这样做,但是工作量有点大。
一个很酷的想法就是利用已有的样本,通过顺时针或逆时针旋转它们,比如说旋转10度,创建新的样本。对于每一个训练样本而言,我们能够生成两个额外的样本。我们可以使用不同的旋转角度创建更多的样本,但是,目前,让我们只尝试+10和-10两个角度,看看这种想法能不能成功。
在10个世代的情况下,神经网络的性能出现了峰值,打破了记录,达到了0.9787,几乎到达98%!
附用于图像旋转训练的代码
inputs_plusx_img = snd.interpolation.rotate(inputs.reshape(28, 28), 10, cval=0.01, order=1,
reshape=False)
n.train(inputs_plusx_img.reshape(784), targets)
# rotated clockwise by x degrees
inputs_minusx_img = snd.interpolation.rotate(inputs.reshape(28, 28), -10, cval=0.01, order=1,
reshape=False)
n.train(inputs_minusx_img.reshape(784), targets)