从移动的目录加载 tensorflow 模型

Load tensorflow model from moved directory

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、checkpoint)移动到其他路径,它会出错

tensorflow.python.framework.errors_impl.NotFoundError: /home/deep_learning_tests/tensorflow/d:/labtest/tensorflow; No such file or directory

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

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

好的,我终于设法加载 moved/copied 模型了。

如果您正在使用

tf.train.latest_checkpoint

那么加载目标文件必须在创建时所在的同一目录中。否则必须打开文件'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"

然后就可以了。 所以我建议检查检查点文件是否写成绝对路径。

只是想补充点东西。我用了 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')