Image 关于使用预先训练的IM2Text模型

Image 关于使用预先训练的IM2Text模型,image,machine-learning,tensorflow,Image,Machine Learning,Tensorflow,从这里开始,我已经走了每一步 但是我得到了以下错误 NotFoundError(回溯见上文):在检查点文件/home/asadmahmood72/Image\u to_text/models/im2text/model.ckpt-300000中未找到张量名称“lstm/basic\lstm\u cell/bias” [[Node:save/RestoreV2_380=RestoreV2[dtypes=[DT_FLOAT],[u device=“/job:localhost/replica:0/t

从这里开始,我已经走了每一步 但是我得到了以下错误

NotFoundError(回溯见上文):在检查点文件/home/asadmahmood72/Image\u to_text/models/im2text/model.ckpt-300000中未找到张量名称“lstm/basic\lstm\u cell/bias” [[Node:save/RestoreV2_380=RestoreV2[dtypes=[DT_FLOAT],[u device=“/job:localhost/replica:0/task:0/cpu:0”]([u arg_save/Const_0_0,save/RestoreV2_380/tensor_name,save/RestoreV2_380/shape_和_切片)]]

我的操作系统是UBUNTU 16.04
我的tensorflow版本是1.2.0,看起来tensorflow API又变了,这使得它与检查点模型不兼容。我在文章中使用了tensorflow 0.12.1。如果tensorflow 0.12.1有效,您可以试用吗?否则,您将不得不亲自培训模型(代价高昂),或者查找使用更新版本的tensorflow生成的检查点文件…

看起来tensorflow API再次更改,这使得它与检查点模型不兼容。我在文章中使用了tensorflow 0.12.1。如果tensorflow 0.12.1有效,您可以试用吗?否则,您将不得不自己训练模型(代价高昂),或者找到一个由更新版本的tensorflow生成的检查点文件…

这有点晚了,但希望这个答案能帮助未来遇到这个问题的人

正如Edouard所提到的,这个错误是由于Tensorflow API中的一个更改引起的。如果您想使用更新版本的Tensorflow,我知道有几种方法可以“更新”您的检查点:

  • 使用Tensorflow中包含的官方实用程序,或
  • 使用GitHub上的0xDFDFDF编写的命令重命名有问题的变量:

    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,加载我的检查点之后效果很好。

    这有点晚了,但希望这个答案能帮助未来遇到这个问题的人

    正如Edouard所提到的,这个错误是由于Tensorflow API中的一个更改引起的。如果您想使用更新版本的Tensorflow,我知道有几种方法可以“更新”您的检查点:

  • 使用Tensorflow中包含的官方实用程序,或
  • 使用GitHub上的0xDFDFDF编写的命令重命名有问题的变量:

    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,加载我的检查点之后效果很好