TensorFlow实战笔记之(3):神经网络优化策略

本文介绍了在TensorFlow中如何应用指数衰减学习率和正则化来优化神经网络,以提高手写数字识别的准确率。通过实例展示了指数衰减学习率的计算公式及正则化(L1和L2)的作用,最终在添加正则化和调整学习率后,模型的准确率从80%提升到了96%。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

根据我前面两篇博客Softmax Regression 实现手写数字识别简单神经网络 实现手写数字识别的结果,使用单层的Softmax Regression进行手写数字识别的准确率约为92%,而加了一层隐层之后,准确率只有80%左右,令人感到意外,因为一般网络越深,分类效果应该越好才对。不过简单分析一下,原因可能就是加了一层隐层之后参数数量变大,容易产生过拟合等。单层的Softmax Regression网络其参数个数为784*10+10=7850,而增加一层15个神经元的隐层之后,参数个数变为(784*15+15)+(15*10+10)=11935。

为了挖掘单隐层神经网络的潜力,加入了一些神经网络的优化策略,包括指数衰减学习率和正则化,下面加以介绍,并在最后给出了代码和优化结果。

一、指数衰减学习率

学习率是指每次参数更新的幅度,如下。

学习率设置的过小则参数更新太慢,学习效率低;学习率设置的太大,则后期容易产生振荡,难以收敛。但在参数更新前期,参数距离最优参数较远,希望学习率设置的大些;而在参数更新后期,参数距离最优参数较近,为了避免产生振荡,希望参数设置的小些。由此可见,学习率设置成固定值并不是最好的。

指数衰减学习率是根据运行的轮数动态调整学习率的一种方法,在TensorFlow中表示如下:

tf.train.exponential_decay(
    learning_rate,        # 学习率初始值
    global_step,          # 当前训练总轮数(不能为负)
    decay_steps,          # 衰减步长(必须为正),即多少轮更新一次学习率
    decay_rate,           # 衰减率,一般取值范围为(0,1)
    staircase=False,      # True:阶梯型衰减, False:平滑衰减
    name=None             # 操作的可选名称,默认为'ExponentialDecay'
)

 学习率的计算公式为:

decayed_learning_rate = learning_rate *
                        decay_rate ^ (global_step / decay_steps)

注意当staircase为Ture时,global_step / decay_steps是一个整数,衰减率为阶梯函数 ,如下。

应用示例:

...
global_step = tf.Variable(0, trainable=False)
starter_learning_rate = 0.1
learning_rate = tf.train.exponential_decay(starter_learning_rate, global_step, 100000, 0.96, staircase=True)
# Passing global_step to min
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值