我終於用我的LSTM模型來預測事情。但是,我遇到了一個我不太明白的新問題。如果我嘗試使用預測的東西Tensorflow爲每個會話運行創建一組新的已有變量?
sess.run(pred, feed_dict={x: xs})
它的第一個預測的偉大工程,但任何後續預測拋出錯誤:
ValueError: Variable weight_def/weights already exists, disallowed. Did you mean to set reuse=True in VarScope?
現在,有關於這個主題的TON - 最它們很容易通過做它所要求的來解決 - 只需在違規行的周圍創建一個變量範圍,並使變量重用爲真。現在,如果我這樣做,我會得到以下錯誤:
ValueError: Variable rnn_def/RNN/BasicLSTMCell/Linear/Matrix does not exist, or was not created with tf.get_variable(). Did you mean to set reuse=None in VarScope?
這使我非常頭疼。我一遍又一遍地讀了Tensorflow Variable Sharing文檔,而且我不能在我的生活中弄清楚我做錯了什麼。這裏有罪行
with tf.variable_scope("rnn_def"):
outputs, states = rnn.rnn(self.__lstm_cell,
self.__x,
dtype=tf.float32)
self.__outputs = outputs
self.__states = states
我有這個代碼嵌套在一個更大的類,只包含圖的其餘部分。爲了訓練它,我只是一遍又一遍地調用我的「火車」方法。這似乎工作得很好,問題結果是預測。
所以我的問題是雙重的:
爲什麼我需要某種形式的共享變量只第一預測之後,但在第一次調用不會失敗?我需要什麼來修復這段代碼,這樣我可以預測不止一次而不會導致錯誤?
什麼時候變量共享很有用,爲什麼Tensorflow每次運行時都會創建新變量?我怎樣才能防止這種情況(我想阻止它?)?
謝謝!
你在jupiter筆記本里面運行嗎?如果使用默認圖形,則每次運行單元格時都會將變量再次添加到圖形中。 – fabrizioM
@fabrizioM我不是,我只是從命令行調用它。 – rec