【问题标题】:Load tensorflow model from moved directory从移动的目录加载 tensorflow 模型
【发布时间】:2018-05-17 12:26:39
【问题描述】:
saver = tf.train.import_meta_graph(filepath)
tf.reset_default_graph()
sess = tf.Session()
saver.restore(sess, tf.train.latest_checkpoint('/home/deep_learning_tests/tensorflow/'))

好的,代码很简单。 并且使用原始路径加载 tensorflow 模型效果很好。

但问题是,如果我将 tensorflow 模型(包括 .index、.meta、检查点)移动到其他路径,则会出错

tensorflow.python.framework.errors_impl.NotFoundError: /home/deep_learning_tests/tensorflow/d:/labtest/tensorflow;没有这样的 文件或目录

它试图找到原始文件路径。如果原始文件路径仍然有模型(意味着模型只复制到新目录),它可以工作。但是如果原来的文件目录被删除,只剩下新的目录,就会报上述错误。

如何加载从原目录移出的tensorflow模型?

【问题讨论】:

  • 您应该在 tf.train.import_meta_graph(filepath) 之前而不是之后拥有 tf.reset_default_graph。您正在导入图表,然后将其重置。
  • 斯科特,感谢您的回答。但它会产生另一个错误。 'LookupError: unknown encoding: raw_unicode_escape' 你有什么线索吗?
  • 没关系,只要我不使用'tf.train.latest_checkpoint',它现在就可以工作。也许我不知道使用它的正确方法。顺便说一句,无论我把 tf.reset_default_graph 放在哪里,上面的错误都不会再发生了,虽然我不知道是什么让错误消失了.....

标签: python tensorflow directory load restore


【解决方案1】:

只是想添加一些东西。我用 saver.restore(sess, 'path_to_dir') 恢复,没用。我在 path_to_dir 中没有 .ckpt 文件,我有 3 个文件:model_name.index、model_name.meta、model_name.data。所以我解决问题的方法是使用 saver.restore(sess, 'path_to_dir/model_name')

【讨论】:

    【解决方案2】:

    好的,我终于知道如何加载移动/复制的模型了。

    如果你正在使用

    tf.train.latest_checkpoint

    那么加载目标文件必须与创建时位于同一目录中。否则,您必须打开文件“检查点”并修改文件中的目录路径。它有效,但不推荐。

    我的建议是不要使用

    tf.train.latest_checkpoint

    在保存的模型被移动或复制到另一个目录/系统时加载模型。

    就用这个

    saver.restore(sess, 'path/to/file')

    然后它将加载模型。

    要清楚,如果您尝试像下面这样加载

    saver = tf.train.import_meta_graph(filepath)
    tf.reset_default_graph()
    sess = tf.Session()
    saver.restore(sess, tf.train.latest_checkpoint('file/path/to/new/directory'))
    

    那么你必须修改'checkpoint'文件到新的目录路径。

    否则,就这样做

    saver = tf.train.import_meta_graph(filepath)
    tf.reset_default_graph()
    sess = tf.Session()
    saver.restore(sess, 'file/path/to/new/directory')
    

    ================================================ =========== 我发现了另一个人们应该知道的问题。 不知何故,如果我在 windows 中训练(没有检查 linux 或 mac osx),检查点文件会用绝对路径写入其路径。

    因此,如果您尝试从其他系统加载模型,它将找不到要加载的正确目录路径,因为它正在寻找由 windows 目录系统写入的绝对目录路径(以 c:/ 或 d 开头: /等)

    我的检查点示例如下。

    model_checkpoint_path: “d:/Projects_data/emulator_data/NEW/cnn_21category_char\tf_ckpt\_loss_1.357984_accuracy_0.5358-2700” all_model_checkpoint_paths: “d:/Projects_data/emulator_data/NEW/cnn_21category_char\tf_ckpt\_loss_1.403583_accuracy_0.5247-1500” all_model_checkpoint_paths: “d:/Projects_data/emulator_data/NEW/cnn_21category_char\tf_ckpt\_loss_1.385835_accuracy_0.5302-1800” all_model_checkpoint_paths: “d:/Projects_data/emulator_data/NEW/cnn_21category_char\tf_ckpt\_loss_1.375068_accuracy_0.5334-2100” all_model_checkpoint_paths: “d:/Projects_data/emulator_data/NEW/cnn_21category_char\tf_ckpt\_loss_1.359645_accuracy_0.5363-2400” all_model_checkpoint_paths: "d:/Projects_data/emulator_data/NEW/cnn_21category_char\tf_ckpt\_loss_1.357984_accuracy_0.5358-2700"

    如果您想读取它,则必须将其更改为如下所示的相对路径:

    model_checkpoint_path:“_loss_1.357984_accuracy_0.5358-2700” all_model_checkpoint_paths:“_loss_1.403583_accuracy_0.5247-1500” all_model_checkpoint_paths:“_loss_1.385835_accuracy_0.5302-1800” all_model_checkpoint_paths:“_loss_1.375068_accuracy_0.5334-2100” all_model_checkpoint_paths:“_loss_1.359645_accuracy_0.5363-2400” all_model_checkpoint_paths:“_loss_1.357984_accuracy_0.5358-2700”

    然后它将起作用。 所以我建议检查检查点文件是否写为绝对路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2022-01-21
      • 2021-03-08
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      相关资源
      最近更新 更多