tensorflow中的global step引數

2021-08-19 01:37:25 字數 1882 閱讀 7662

global_step在滑動平均、優化器、指數衰減學習率等方面都有用到,這個變數的實際意義非常好理解:代表全域性步數,比如在多少步該進行什麼操作,現在神經網路訓練到多少輪等等,類似於乙個鐘錶。

global_step經常在滑動平均,學習速率變化的時候需要用到,這個引數在tf.train.gradientdescentoptimizer(learning_rate).minimize(loss, global_step=global_steps)裡面有,系統會自動更新這個引數的值,從1開始。

根據**可以發現global_step的初始化值是0:

global_step=tf.variable(0, trainable=false)  

```這個初始化**十分簡單,但也是問題所在。如果global_step直接賦值為0了,還怎麼表示全域性的步數?global_step到底是怎麼完成自動加1的?

import tensorflow as tf  

import numpy as np

x = tf.placeholder(tf.float32, shape=[none, 1], name='x')

y = tf.placeholder(tf.float32, shape=[none, 1], name='y')

w = tf.variable(tf.constant(0.0))

global_steps = tf.variable(0, trainable=false)

learning_rate = tf.train

.exponential_decay(0.1, global_steps, 10, 2, staircase=false)

loss = tf.pow(w*x-y, 2)

train_step = tf.train

.gradientdescentoptimizer(learning_rate).minimize(loss,global_step=global_steps)

with tf.session() as sess:

sess.run(tf.global_variables_initializer())

for i in range(10):

sess.run(train_step, feed_dict=)

print(sess.run(learning_rate))

print(sess.run(global_steps))

如果把train_step = tf.train.gradientdescentoptimizer(learning_rate).minimize(loss,global_step=global_steps)後面部分的global_step=global_steps去掉,global_step的自動加一就會失效。

輸出如下:

0.1

0 0.1

0 0.1

0 0.1

0 0.1

0 0.1

0 0.1

0 0.1

0 0.1

0 0.1

0因為指數衰減的學習率是伴隨global_step的變化而衰減的,所以當global_step不改變時,學習率也變成乙個定值。

綜上所述:損失函式優化器的minimize()中global_step=global_steps能夠提供global_step自動加一的操作。

這裡有個額外的疑慮說明:global_steps是等號右邊,在程式語言裡面通常當作定值(即不會受函式影響)賦值給等號左邊的global_step。然而,在這個優化器裡面能夠使得右邊的變數自動加一。這確實是程式語言裡面少見的,也是需要特別注意的。

參考部落格:

Tensorflow中的Lazy load問題

用tensorflow訓練或者inference模型的時候,有時候會遇到執行越來越慢,最終記憶體被佔滿,導致電腦宕機的問題,我們稱之為記憶體溢位。出現這種問題很可能是因為在乙個session中,graph迴圈建立重複的節點所導致的lazy load問題。舉個例子,用tensorflow迴圈做多次加法...

tensorflow中的函式

執行當前tensor的run 操作 a tf.variable tf.ones 10 with tf.session as sess tf.global variables initializer run b sess.run a 1 b a eval 2 print b 中的 1 2 行的功能一樣...

TensorFlow 中的identity 函式

identity n.身份 本身 本體 特徵 特有的感覺 或信仰 同一性 相同 一致 identity的意思是自身的意思,簡單說就是賦值。x tf.variable 0.0 y x和下面的 x tf.variable 0.0 y tf.identity x 的區別在於,x是tensor型別,直接利用...