我正在训练一个简单的LSTM,并按照官方文档中的建议保存检查点。一旦我完成了图形的创建和训练,我想检索这个经过训练的模型,并在将来的新数据中对其进行测试。在
我的图表基本上是这样的:
1号区块
#All parameters
#################
x = tf.placeholder declaration
y = tf.placeholder declaration
weights = {'out': tf.Variable initialized from a random distribution}
biases = {'out': tf.Variable initialized from a random distribution}
pred = RNN(x, weights, biases) # Defines an LSTM cell and returns the predictions
cost = f(pred,y)
optimizer = myOptimizer.minimize(cost)
init = tf.global_variables_initializer()
block2——运行培训和保存检查点
^{pr2}$我正在尝试从另一个脚本还原它,我正在执行block1
,然后执行以下操作:
saver = tf.train.Saver()
with tf.Session() as sess:
saver = tf.train.import_meta_graph('chckpt.meta')
saver.restore('chckpt')
sess.run(init)
predictions = sess.run(pred, feed_dict=test_feed)
我没有得到我应该从检查点得到的预期结果。我正在从保存的模型中恢复一些内容,但现在我的权重似乎是随机的。我怀疑这是因为sess.run(init)
行重置了我从检查点恢复的内容并进行了新的随机初始化。但是当我跳过这一行时,我得到了以下错误:
Attempting to use uninitialized value rnn/basic_lstm_cell/bias
我做错什么了?在
我尝试在不运行init
的情况下手动恢复weight和bias变量,我似乎在检索存储的值。但是要运行pred
操作,我需要恢复在RNN()
函数中创建的所有变量,这很麻烦。有更好的方法吗?在
我还尝试从我保存的同一脚本中的检查点恢复,不使用sess.run(init)
就可以逃脱惩罚。我可以对此运行pred
操作并得到正确的结果。但是,它只能在同一个脚本中工作(可能是因为我在恢复脚本中遗漏了一些内容)
目前没有回答
相关问题 更多 >
编程相关推荐