使用人工神经网络完成手写数字识别任务。具体要求如下: (1)batch_size和step_num自定义,把loss值打印出来。 (2)神经网络的层数、节点数目、激活函数自定义。(记录心得) (3)使用tensorboard把计算图显示出来。
一、初始数据如下:
batch_size=64
lr = 0.01 #学习率
step_num = 6000 #计算6000次
计算的神经元层数是3层
使用的是随机梯度下降算法 tf.train.GradientDescentOptimizer()
计算出来的准确度为:0.717
二、参数调优过程数据如下:
1、调参数据:初次尝试参数改为如下batch_size=640 ,step_num=6000 ,计算层
数是3层,使用的反向传播算法是GradientDescentOptimizer(),收敛的比较慢,最
终训练出来的准确度为71.72%,接着改参数。
2、调参数据:base_size=640 ,step_num=6000,计算层数还是3层,使用的反向
传播算法是AdamOptimizer, 最后得到损失函数是0.0003的时候,准确度非常稳定
的保持在0.958附近最终准确度可收敛到95.88%
3、调参数据:base_size=640 ,step_num=6000,修改计算层数数值,
计算6层,使用的反向传播算法是AdamOptimizer, 准确度只能达到0.9468%,
在此次调优过程中发现修改层数对最终的准确度不会提升,反而还下降了1%
4、调参数据:base_size=640,step_num=12000,修改计算层数数值, 计算6层, 使用的反向传播算法是AdamOptimizer,最好结果是损失函数0.15 的时候,可收敛 到96%
三、计算图如下:
1、打开terminal输入 D: ensorflow> tensorboard logdir D:AIwork2.py
2、在谷歌浏览器输入:http://127.0.0.1:6006
3、显示如下图:
四、结论: 1、发现在调参过程当中起重大作用的还是选择了AdamOptimizer这个优化器,在一 开始训练的时候就可以快速的进行收敛并且在训练过程中,准确度的递增是比较均匀 的,没有出现较大的偏差的波动。 2、相对来说改动batch_size和增加神经元的层数对此次的神经网络的训练的效果和 作用不是很大。 3、改动学习率对此次神经网络的训练效果作用也不是很大。 4、在此次调优过程中step_num如果超过12000反而会出现准确率下降的现 象,会 出现过拟合的情况,测试结果step_num在6000到12000之间会比较合理。