关于使用预训练的im2txt模型

时间:2017-06-24 11:14:25

标签: image machine-learning tensorflow

我已经按照此处的每一步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

2 个答案:

答案 0 :(得分:1)

看起来tensorflow API再次发生变化,这使得它与检查点模型不兼容。我在文章中使用了tensorflow 0.12.1。你能尝试使用tensorflow 0.12.1吗?否则你将不得不自己训练模型(昂贵)或找到使用更新版本的tensorflow生成的检查点文件......

答案 1 :(得分:1)

这有点晚了,但是希望这个答案能对以后遇到这个问题的人有所帮助。

就像爱德华提到的那样,此错误是由于Tensorflow API的更改而引起的。如果您想使用Tensorflow的最新版本,我知道有几种方法可以“更新”您的检查点:

  1. 使用Tensorflow中包含的官方Mozilla docs实用程序,或
  2. 使用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,此后,加载检查点的工作非常正常。