簡體   English   中英

TensorFlow:多次初始化變量

[英]TensorFlow: Initializing variables multiple times

我對以下代碼段的運行方式感到困惑。

import tensorflow as tf

x = tf.Variable(0)
init_op = tf.initialize_all_variables()
modify_op = x.assign(5)

with tf.Session() as sess:
    sess.run(init_op)
    print(sess.run(x))
    x += 3
    print(sess.run(x))
    sess.run(init_op) # Trying to initialize x once again to 0
    print(sess.run(x)) # Gives out 3, which leaves me confused.
    print(sess.run(modify_op))
    print(sess.run(x)) # Gives out 8, even more confusing

這是輸出:
0
3
3
5
8

x += 3線不是默認圖形的一部分嗎? 還是發生了其他事情? 一些幫助將不勝感激,謝謝!

您的x變量被更改

x += 3

但並非您所期望的那樣。 tensorflow庫代碼優先於+ ,因此您可以有效地將內容x交換為新的TF張量(舊的仍然在圖中,現在x指向新的張量)。 像這樣寫出來:

x = tf.Variable(0) + 3

而且更清楚了發生了什么。 另外,插入一些打印語句。

x = tf.Variable(0)
print(x)
# <tensorflow.python.ops.variables.Variable object at 0x1018f5d68>

x += 3
print(x)
# Tensor("add:0", shape=(), dtype=int32)

如果x的內容對您很重要,那么如果以后要使用變量名跟蹤/顯示x ,請避免重新分配給x 另外,如果沒有方便的Python變量指向該張量,則始終可以命名該張量並直接從圖中獲取它。 重要的是要習慣TF變量和Python變量之間的分離。

實際上,在嘗試嘗試分配和重置TF變量時,需要使用TF分配運算符:

import tensorflow as tf

x = tf.Variable( 0 )

with tf.Session() as session:
    session.run( tf.initialize_all_variables() )
    print( x.eval() )

    session.run( x.assign( x + 3 ) )
    print( x.eval() )

    session.run( tf.initialize_all_variables() )
    print( x.eval() )

輸出:

0
3
0

如您所料

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM