由于python內部的變量其實都是reference,而Tensorflow實現的時候也沒有意義去判斷輸出是否是同一變量名,從而判定是否要新建一個Tensor用于輸出。Tensorflow為了滿足所有需求,定義了兩個不同的函數:tf.add和tf.assign_add。從名字即可看出區別,累加應該使用tf.assign_add。同理的還有tf.assign_sub和tf.assign。
具體地,筆者需要一個iteration counter類似的變量,即每次使用一個batch更新參數之后都使得該變量加一,進而控制learning rate等參數來調節學習過程。
最初的實現如下:
a = tf.Variable(tf.zeros(1))a = tf.add(a,tf.ones(1))sess = tf.Session()sess.run(tf.global_variable_initializer())for i in range(1000): print(sess.run(a))
那因為第一行代碼輸出的a和第二行代碼輸出的a,雖然變量名相同,但是實質指向的變量以及空間都不同,每次輸出的都是1。
更改后的代碼則是如下:
a = tf.Variable(tf.zeros(1))a = tf.assign_add(a,tf.ones(1))sess = tf.Session()sess.run(tf.global_variable_initializer())for i in range(1000): print(sess.run(a))
以上這篇Tensorflow累加的實現案例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林站長站。
新聞熱點
疑難解答