【发布时间】:2016-11-27 20:48:34
【问题描述】:
我终于使用我的 LSTM 模型来预测事物了。但是,我遇到了一个我不太了解的新问题。如果我尝试使用
sess.run(pred, feed_dict={x: xs})
第一次预测效果很好,但任何后续预测都会抛出错误:
ValueError: 变量 weight_def/weights 已经存在,不允许。您的意思是在 VarScope 中设置 reuse=True 吗?
现在,关于这方面的话题有很多——而且大多数都可以通过按照它的要求轻松解决——只需在有问题的行周围创建一个变量范围,并使变量重用成为真的。现在,如果我这样做,我会收到以下错误:
ValueError:变量 rnn_def/RNN/BasicLSTMCell/Linear/Matrix 不存在,或者不是使用 tf.get_variable() 创建的。您的意思是在 VarScope 中设置 reuse=None 吗?
这让我很头疼。我一遍又一遍地阅读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
我将此代码嵌套在一个更大的类中,该类仅包含图表的其余部分。为了训练它,我只是一遍又一遍地调用我的“训练”方法。这似乎工作正常,问题最终是预测。
所以我的问题有两个:
为什么我只在 first 预测之后才需要某种变量共享,但第一次调用没有失败?我需要什么来修复此代码,以便我可以多次预测而不会导致错误?
什么时候变量共享有用,为什么我每次运行 Tensorflow 时都会创建新变量?我怎样才能防止这种情况(我想防止这种情况吗?)?
谢谢!
【问题讨论】:
-
你在 jupiter notebook 中运行吗?如果您使用默认图表,则每次运行单元格时,它都会将变量再次添加到图表中。
-
@fabrizioM 我不是,我只是从命令行调用它。
标签: python variables scope tensorflow prediction