TensorFlow函式之tf.train.ExponentialMovingAverage()
阿新 • • 發佈:2018-12-22
tf.train.ExponentialMovingAverage來實現滑動平均模型。
格式:
tf.train.ExponentialMovingAverage(decay,num_step)
引數說明:
第一個引數:decay,衰減率,一般設定接近1的數。
第二個引數:num_step,動態設定decay的大小。
tf.train.ExponentialMovingAverage使用步驟:
- 定義一個滑動平均的類,初始化衰減率(接近1)和控制衰減變數的step:ema = tf.train.ExponentialMovingAverage(0.99, step)
- 定義一個更新變數滑動平均的操作:maintain_average_op = ema.apply([變數])
- 獲取滑動平均之後的取值:通過ema.average(變數)
簡單例子說明函式的用法:
#!/usr/bin/env python # -*- coding:utf-8 -*- import tensorflow as tf # 定義一個變數用於計算滑動平均,這個變數的初始值為0,注意這裡手動指定了變數的型別為float32,因為所需要計算滑動平均的變數必須是實數型 v1 = tf.Variable(0, dtype=tf.float32) # 這裡step變數模擬神經網路函式中迭代的輪數,可以用於動態控制衰減率 step = tf.Variable(0, trainable=False) # 定義一個滑動平均的類,初始化時給定衰減率(0.99)和控制衰減變數的step ema = tf.train.ExponentialMovingAverage(0.99, step) # 定義一個更新變數滑動平均的操作。這裡需要給定一個列表,每次執行這個操作時這個列表中的變數都會更新 maintain_average_op = ema.apply([v1]) with tf.Session() as sess: # 初始化所有變數 init_op = tf.global_variables_initializer() sess.run(init_op) # 通過ema.average(v1)來獲取滑動平均之後變數的取值。在初始化之後變數v1的值和v1的滑動平均都為0 print(sess.run([v1, ema.average(v1)])) # 輸出[0.0, 0.0] # 更新變數v1的值到5 sess.run(tf.assign(v1, 10)) # 更新vl的值。衰減率為min{0.99 ,(l+step)/(lO+step)= 0.1)=0.l # 所以vl的滑動平均會被更新為0.1×0+0.9×5=4.5。 sess.run(maintain_average_op) print(sess.run([v1, ema.average(v1)])) # 輸出[10.0, 9.0]
輸出為:
[0.0, 0.0]
[10.0, 9.0]