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:


問題

  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.name_scope()的框架下使用這兩種方法,使用tf.Variable(),盡管name一樣,但為了不重復變量名,Tensorflow輸出的變量名並不一樣,所以本質上是不一樣的變量;使用tf.get_variable()定義的變量雖然不會被tf.name_scope()中的名字影響,但在未指定共享變量時,如果重名了會報錯。要實現變量共享,可以使用tf.variable_scope(reuse=tf.AUTO_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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM