問題
ValueError: Variable rnn/basic_lstm_cell/kernel already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope? Originally defined at:
原因
調用了兩次RNN網絡,在第二次調用的時候報了上面這個錯誤。主要是因為第二次的變量名和第一次的變量名一樣,導致了變量命名相同的沖突。在Tensorflow中有兩種方法生成變量variable,tf.get_variable()
和tf.Variable()。在
tf.AUTO_REUSEtf.name_scope()
的框架下使用這兩種方法,使用tf.Variable(),盡管name一樣,但為了不重復變量名,Tensorflow輸出的變量名並不一樣,所以本質上是不一樣的變量;使用tf.get_variable()定義的變量雖然不會被tf.name_scope()中的名字影響,但在未指定共享變量時,如果重名了會報錯。要實現變量共享,可以使用tf.variable_scope(reuse=)創建具有相同名稱的作用域。
1 # 出錯代碼 2 with tf.name_scope("fw_side"): 3 4 # 改成 5 with tf.name_scope("fw_side"), tf.variable_scope("fw_side", reuse=tf.AUTO_REUSE):
改了之后,在第二次調用RNN時就不會報錯了。
詳情了解:https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-12-scope/