tensorflow學習筆記3

weixin_34337265發表於2018-11-26

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'))

相關文章