zoukankan      html  css  js  c++  java
  • 基于TensorFlow框架实现人工神经网络完成手写数字识别任务【多测师】

    使用人工神经网络完成手写数字识别任务。具体要求如下:
    (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之间会比较合理。
  • 相关阅读:
    STL_算法_05_集合算法
    STL_算法_04_算术和生成算法
    STL_算法_03_拷贝和替换算法
    STL_算法_02_排序算法
    STL_算法_01_查找算法
    STL_容器使用时机
    STL_容器共通能力
    Qt5_选择文件对话框
    Qt5_当前exe所在路径
    Java 静态代理和动态代理
  • 原文地址:https://www.cnblogs.com/xiaoshubass/p/13022049.html
Copyright © 2011-2022 走看看