4.2学习率
learning_rate,表示每次参数更新的幅度大小。过大会导致待优化的参数在最小值附近波动,不收敛;而学习率过小,则收敛过慢。
公式为:
代码如下:
import tensorflow as tf
w = tf.Variable(tf.constant(5,dtype=tf.float32))
loss = tf.square(w+1)
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
with tf.Session() as sess:
init_op = tf.global_variables_initializer()
sess.run(init_op)
for i in range (40):
sess.run(train_step)
w_val = sess.run(w)
loss_val = sess.run(loss)
print ("after %s steps: w is %f, loss is %f."%(i,w_val,loss_val))
指数衰减学习率
用函数表述为
global_step = tf.Variable(0,trainable = False)
learning_rate = tf.train.exponential_decay(
LEARNING_RATE_BASE,#学习率初始值
global_step,#当前训练轮数,为不可训练参量
LEARNING_RATE_STEP,#更新学习率的频率
LEARNING_RATE_DECAY,#学习率衰减率
staircase = True/False#为True时取整数,为阶梯型衰减,反之为平滑曲线
4.3滑动平均
通过记录一段时间内所有参数w和b各自的平均值,可以增强模型的繁华能力。
计算公式为:
影子=衰减率影子+(1-衰减率)参数
其中,衰减率为
代码为
ema= tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY, global_step)
其中,前者为滑动平滑率,接近1左右,后者为训练轮数。
ema_op = ema.apply(tf.trainable_variables())
其中,apply函数表示对括号内参数求滑动平均,自变量为把所有待训练参数汇总为列表。
with tf.control_dependencies([train_step, ema_op]):
train_op = tf.no_op(name = 'train')
正则化
神经网络在训练过程中可能会出现过拟合的情况,即在训练集上效果良好,而预测时效果不好,说明泛化能力差。
正则化就是在损失函数之中给每个参数w加上权重,从而引入模型复杂度指标,抑制模型噪声,减小过拟合。
公式为
loss = loss(y与y_)+REGULARIZER*loss(w)
第二项为超参数,给出参数w在总loss的比例,有不同的取法。
对于,代码为loss(w)=tf.contrib.layers.l1_regularizer(REGULARIZER)(w)
对于,代码为loss(w)=tf.contrib.layers.l2_regularizer(REGULARIZER)(w)
把正则化修正加入到算法中用代码tf.add_to_collection('losses',tf.contrib.layers.l2_regularizer(regularizer)(w))
loss=cem+tf.add_n(tf.get_collection('losses'))
网友评论