我已经按照此处的每一步https://edouardfouche.com/Fun-with-Tensorflow-im2txt/ 但我得到以下错误
NotFoundError(参见上面的回溯):检查点文件中未找到张量名称“lstm / basic_lstm_cell / bias”/home/asadmahmood72/Image_to_text/models/im2txt/model.ckpt-3000000 [[节点:save / RestoreV2_380 = RestoreV2 [dtypes = [DT_FLOAT],_ device =“/ job:localhost / replica:0 / task:0 / cpu:0”](_ arg_save / Const_0_0,save / RestoreV2_380 / tensor_names,save / RestoreV2_380 / shape_and_slices)]]
我的操作系统是UBUNTU 16.04 我的tensorflow版本是1.2.0
答案 0 :(得分:1)
看起来tensorflow API再次发生变化,这使得它与检查点模型不兼容。我在文章中使用了tensorflow 0.12.1。你能尝试使用tensorflow 0.12.1吗?否则你将不得不自己训练模型(昂贵)或找到使用更新版本的tensorflow生成的检查点文件......
答案 1 :(得分:1)
这有点晚了,但是希望这个答案能对以后遇到这个问题的人有所帮助。
就像爱德华提到的那样,此错误是由于Tensorflow API的更改而引起的。如果您想使用Tensorflow的最新版本,我知道有几种方法可以“更新”您的检查点:
使用GitHub上0xDFDFDF编写的checkpoint_convert.py
重命名有问题的变量:
OLD_CHECKPOINT_FILE = "model.ckpt-1000000"
NEW_CHECKPOINT_FILE = "model2.ckpt-1000000"
import tensorflow as tf
vars_to_rename = {
"lstm/basic_lstm_cell/weights": "lstm/basic_lstm_cell/kernel",
"lstm/basic_lstm_cell/biases": "lstm/basic_lstm_cell/bias",
}
new_checkpoint_vars = {}
reader = tf.train.NewCheckpointReader(OLD_CHECKPOINT_FILE)
for old_name in reader.get_variable_to_shape_map():
if old_name in vars_to_rename:
new_name = vars_to_rename[old_name]
else:
new_name = old_name
new_checkpoint_vars[new_name] = tf.Variable(reader.get_tensor(old_name))
init = tf.global_variables_initializer()
saver = tf.train.Saver(new_checkpoint_vars)
with tf.Session() as sess:
sess.run(init)
saver.save(sess, NEW_CHECKPOINT_FILE)
我使用了选项#2,此后,加载检查点的工作非常正常。