1. 指数衰减学习率
tf.train.exponential_decay
先使用较大的学习率快速得到一个较优解,然后随着迭代逐步减小学习率,使模型在训练后期更加稳定。
global_step = tf.Variable(0,trainable=False) learning_rate = tf.train.exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False) optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost,global_step = global_step)
2. 滑动平均
tf.train.ExponentialMovingAverage
滑动平均记录了一段时间内模型中所有参数 w和b 各自的平均值。利用滑动平均值可以增强模型的泛化能力。
其中,shadow_variable为影子变量,variable为待更新的变量,decay为衰减率。decay决定了模型的更新速度,decay越大,模型越趋于稳定。实际应用中,一般设定为接近1的数(如0.999或0.9999)。为了使模型在训练前期可以更新的更快,ExponentialMovingAverage还提供了num_updates参数设置decay的大小:
使用如下:
variable_averages = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECCAY,global_step) variable_averages_op = variable_averages.apply(tf.trainable_variables()) with tf.control_dependencies([optimizer,variable_averages_op]): train_op= tf.no_op(name = 'train')
3. 正则化
Tensorflow提供了
tf.contrib.layers.l1_regularizer
tf.contrib.layers.l2_regularizer
来计算给定参数的L1/L2正则化项的值。
使用如下:
regularizer = tf.contrib.layers.l2_regularizer(REGULARIZER_RATE) tf.add_to_collection('losses',regularizer(W1)) tf.add_to_collection('losses',regularizer(W2)) cem = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits = Y_, labels = Y)) cost = cem + tf.add_n(tf.get_collection('losses'))