我保存了一个训练有素的LSTM模型,我想恢复预测,以便在测试中使用它。我试图关注this post。但我收到了错误。这是我试过的:
x = tf.placeholder('tf.float32', [None, input_vec_size, 1])
y = tf.placeholder('tf.float32')
def recurrent_neural_network(x):
layer = {'weights': tf.Variable(tf.random_normal([n_hidden, n_classes])),
'biases': tf.Variable(tf.random_normal([n_classes]))}
x = tf.transpose(x, [1, 0, 2])
x = tf.reshape(x, [-1, 1])
x = tf.split(x, input_vec_size, 0)
lstm_cell = rnn.BasicLSTMCell(n_hidden, state_is_tuple=True)
outputs, states = rnn.static_rnn(lstm_cell, x, dtype=tf.float32)
output = tf.add(tf.matmul(outputs[-1], layer['weights']), layer['biases'])
return output
def train_neural_network(x):
prediction = recurrent_neural_network(x)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y))
optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(cost)
saver = tf.train.Saver()
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
Training ...
saver.save(sess, os.path.join(os.getcwd(), 'my_test_model'))
之后,在训练阶段我正在尝试
def test_neural_network(input_data):
with tf.Session() as sess:
#sess.run(tf.global_variables_initializer())
new_saver = tf.train.import_meta_graph('my_test_model.meta')
new_saver.restore(sess, tf.train.latest_checkpoint('./'))
prediction = tf.get_default_graph().get_tensor_by_name("prediction:0")
Calculate features from input_data ...
result = sess.run(tf.argmax(prediction.eval(feed_dict={x: features}), 1))
但是这会引发以下错误:
KeyError:&#34;名称&#39;预测:0&#39;是指不存在的张量。图表中不存在操作&#39;预测&#39; <#34;
然后我尝试添加:
tf.add_to_collection('prediction', prediction)
在恢复之前保存并替换prediction = tf.get_collection('prediction')[0]
之前。但这给了我以下错误:
InvalidArgumentError(请参阅上面的回溯):您必须为占位符张量提供一个值&#39; Placeholder_2&#39;与dtype浮动和形状[?,34,1] [[Node:Placeholder_2 = Placeholderdtype = DT_FLOAT,shape = [?,34,1],_device =&#34; / job:localhost / replica:0 / task:0 / cpu:0&#34;]]
我知道第一个错误,我应该为恢复分配一个名称,但prediction
不是张量流变量。我经历了一些以前的帖子和文章,但无法提出一个有效的解决方案。所以,我的问题是:
感谢。
答案 0 :(得分:0)
我最后可以保存我训练过的模型,所以如果有人遇到这个问题,可以发布答案。我没有得到确切问题的解决方案,但我可以使用tflearn
构建和保存我的模型。为了训练和储存:
model = tflearn.DNN(lstm_model(n_classes, input_vec_size))
model.fit(train_x, train_y, validation_set=(test_x, test_y), n_epoch=20,
show_metric=True, snapshot_epoch=True, run_id='lstm_model')
model.save("../Models/lstm_model")
后来,恢复:
model.load(filepath+"lstm_model")
这似乎是一种更容易使用模型的方法,并提供了一种紧凑而新颖的方式来完成我在问题中发布的相同任务。