2017-09-18 9 views
0

私は初期化されていない変数に関連するエラーを取得保管しかし、私はtensorflowreport_uninitialized_variables出力説明

init_op = tf.variables_initializer([v for v in tf.global_variables() if v.name.split(':')[0] in set(sess.run(tf.report_uninitialized_variables()))]) 
sess.run(init_op) 

に初期化されていない変数を初期化するために、次のコードをしようとしていました。それから私は私が

local vars 
[] 
global vars 
[<tf.Variable 'test:0' shape=() dtype=int32_ref>] 
uninitialised vars 
{b'test'} 

なぜ変数名の前にbがあり得るコード

count = tf.Variable(0, trainable=False, name='test') 

with tf.Session() as sess: 
    print('local vars') 
    print(tf.local_variables()) 
    print('global vars') 
    print(tf.global_variables()) 
    print('uninitialised vars') 
    print(set(sess.run(tf.report_uninitialized_variables()))) 

を実行tf.report_uninitialized_variables() の出力によく見ていましたか?

ありがとうございます!

答えて

0

名前の前にあるbは、python 3を使用していて、report_uninitialized_variables()の結果の文字列が実際にbytestringであるためです。

''(たとえば、'Hello')で文字列を定義すると、ユニコード文字列が作成されます。これにより、文字列自体とバイト表現との間のエンコーディングが必要なため、すべての可能性のあるアクセントを表現することができます。一方、 bytestringは、に格納されたバイトの直接ASCII解釈であるです。通常のPython 3文字列とbytestringを区別するには、の前にbという文字列定義(例:b'Hello I'm a bytestring')を追加する必要があります。 同様に、変数値を出力するときには、bytestringsを扱い、通常の文字列ではないことを指定するために、同様に、bが必要に追加されます。

関連する問題