tensorflow神经网络的优化

1.学习率的设置

在训练神经网络时,需要设置学习率来控制参数的更新速度。TensorFlow提供了一种灵活更新学习率的方法:指数衰减法。
tf.train.exponential_decay()函数实现了指数衰减学习率。可以先使用一个较大的学习率来快速得到一个比较优的解,然后随着迭代的进行逐步减少学习率,是的模型在训练的后期更加稳定。

tf.train.exponential_decay(
    learning_rate,初始学习率
    global_step,当前迭代次数
    decay_steps,衰减速度(在迭代到该次数时学习率衰减为earning_rate * decay_rate)
    decay_rate,学习率衰减系数,通常介于0-1之间。
    staircase=False,(默认值为False,当为True时,(global_step/decay_steps)则被转化为整数) ,选择不同的衰减方式。
    name=None
)
参考:https://blog.csdn.net/ddy_sweety/article/details/80668867 

学习率的变化

2.防止过拟合

神经网络在训练数据不够多时,或者overtraining时,常常会导致过拟合。随着训练过程,网络在训练集上的错误率渐渐减小,但是在验证集上的错误率却反而渐渐增大。
1. 正则化:
主要有 L1 正则化( L1-norm )和L2正则化(L2-norm)。L1正则化在原始的代价函数后面加上一个L1正则化项,即所有权重w的绝对值的和,乘以 λ/n。L2正则化在原始的代价函数后面加上的是 所有权重w的 平方的和,再乘以 λ/2n(方便求导)。
TensorFlow 提供了tf.contrib.layers.l1_regularizer函数,计算一个给定参数的L1正则化项的值。tf.contrib.layers.l2_regularizer函数,L2正则化。
2. dropout:
L1、L2正则化是通过修改代价函数来实现防止过拟合的,而 Dropout 则是通过修改神经网络本身来实现的,它是在训练网络时用的一种技巧。在模型训练时按照一定的概率 暂时让网络某些隐含层节点的权重不工作(也称丢弃),不工作的那些节点可以暂时认为不是网络结构的一部分,但是它的权重得保留下来,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。
TensorFlow的tf.nn.dropout函数
3. 滑动平均模型:
TensorFlow 提供了tf.train.ExponentialMovingAverage函数来实现,提供一个衰减率(decay)来控制制模型更新的速度,它的值越大模型越趋于稳定。decay 一般会设置为十分接近 1 的常数(0.99或0.999)。为了使得模型在训练的初始阶段更新得更快ExponentialMovingAverage 还提供了num_updates 参数(可使用神经网络的迭代轮数)来动态设置 decay 的大小。详细的解释

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值