Tensorflow bug(一) ValueError The passed save_path is not a valid checkpoint

  近日,在使用Siamese网络实现西储大学轴承数据故障诊断中,测试的过程出现了

1 ValueError: The passed save_path is not a valid checkpoint

的错误。错误是由于在测试的过程中导入checkpoint时,传入的save_path是无效的,或者是说,传入的save_path在给定的路径中没有找到对应的文件。

  网上关于该问题的解决方案主要包含两个方面:

  1. checkpoint路径应该使用相对路径;
  2. 路径字符不要太长

  但均没有从本质上解决遇到的问题,也没有从源头讲明白bug出现的缘由。

  Tensorflow会将模型保存生成四个文件,如下图所示。

  • 图a的情况是模型保存时,仅传入了地址,而地址中不包含文件的名称。

  如第6行代码所示,传入的save_path中只包含要保存checkpoint的路径,未声明保存文件的名称。

  在这种情况下,checkpoint_dir可以直接作为路径传入模型恢复save.restore()的函数中。

1 ...
2 TIMESTAMP = "{0:%Y-%m-%dT%H-%M-%S}".format(datetime.now())
3 checkpoint_dir = os.path.join(".\\checkpoint\\%s" % (TIMESTAMP))
4 save = tf.train.Saver()
5 ...
6 save_path = save.save(sess,save_path=checkpoint_dir+"\\")
  • 图b的情况是模型保存时,地址中添加了需要保存文件的名称filename,并且在save声明时,使用了max_to_keep=1的设置,即保存的文件名称中,在XXX.ckpt后包含 "-1" 的名称,其表示当前保存模型的训练代数。

  在这种情况下,使用当前的checkpoint_dir作为模型恢复saver.restore()函数中的路径,将会报错。

1 ValueError: The passed save_path is not a valid checkpoint
1 ...
2 TIMESTAMP = "{0:%Y-%m-%dT%H-%M-%S}".format(datetime.datetime.now())
3 checkpoint_dir = ".\\checkpoint\\%s" % TIMESTAMP
4 filename = "few_shot_learning_fault_diagnosis"
5 checkpoint_dir = os.path.join(checkpoint_dir, filename+".ckpt")
6 save = tf.train.Saver(max_to_keep=1)
7 ...
8 saver.save(sess, diag_obj.checkpoint_dir, global_step=step)

  

  总结: 在编写时,如果使用的是save = tf.train.Saver() 使用了max_to_keep=1的设置,并且在模型训练保存的过程中,是每训练一代保存一次。 此时,checkpoint_dir将不再适用于save.restore(sess, checkpoint_dir)中的checkpoint_dir。因为从图b中可以看到,其包含-1(训练代数的后缀)。如果仍将checkpoint_dir作为模型参数读入的地址传入save.restore()中,将会报

1 ValueError: The passed save_path is not a valid checkpoint

的错误。

【解决方法:】

  使用tf.train.latest_checkpoint()函数,将不包含文件名称的路径传入函数中,获取到文件的路径module_file,并将其传入saver.restore()中,便可以解决上述问题。

1 ...
2 module_file = tf.train.latest_checkpoint(diag_obj.save_path)
3 saver.restore(sess, module_file) 

  module_file获取到的结果如下所示, 其包含训练代数的信息,这也是为什么直接使用原始的checkpoint_dir 会报错的原因

1 module_dir: few_shot_learning_fault_diagnosis.ckpt-1

  

  该错误的原因是由于每一代保存一次而造成的设置的保存文件名称与实际保存文件名称不一致。

原文地址:https://www.cnblogs.com/monologuesmw/p/12273727.html

时间: 2024-10-24 19:23:13

Tensorflow bug(一) ValueError The passed save_path is not a valid checkpoint的相关文章

tensorflow models api:ValueError: Tensor conversion requested dtype string for Tensor with dtype float32: 'Tensor("arg0:0", shape=(), dtype=float32, device=/device:CPU:0)'

tensorflow models api:ValueError: Tensor conversion requested dtype string for Tensor with dtype float32: 'Tensor("arg0:0", shape=(), dtype=float32, device=/device:CPU:0)' 这个原因是你的tf-record有问题哈.检查pipline里面的tfrecord. tensorflow models api:ValueErr

Unity bug: transform.position assign attempt for 'SceneCamera' is not valid. Input position is { NaN, NaN, NaN }. UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

问题: Unity 报错: transform.position assign attempt for 'SceneCamera' is not valid. Input position is { NaN, NaN, NaN }. UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) 解决方法: 改变Unity editor 布局(layout)可以解决这个奇怪的问题. Unity bug: transform.position assign a

Tensorflow word2vec+manage experiments

Lecture note 5: word2vec + manage experiments Word2vec Most of you are probably already familiar with word embedding and understand the importance of a model like word2vec. For those who aren't, Stanford CS 224N's lecture on word vectors is a great r

转载:tensorflow保存训练后的模型

训练完一个模型后,为了以后重复使用,通常我们需要对模型的结果进行保存.如果用Tensorflow去实现神经网络,所要保存的就是神经网络中的各项权重值.建议可以使用Saver类保存和加载模型的结果. 1.使用tf.train.Saver.save()方法保存模型 tf.train.Saver.save(sess, save_path, global_step=None, latest_filename=None, meta_graph_suffix='meta', write_meta_graph

ValueError: Invalid leaf XXX

Bug:ValueError: Invalid leaf XXX 无效的搜索条件--检查search函数中的domain表达式格式!是否少了括号! search(['user_id', '=', user_id,]) 上式错误,应该改为: search([('user_id', '=', user_id),]) 原文地址:https://www.cnblogs.com/cnodoo/p/9281381.html

tensorflow 将训练模型保存为pd文件

前言 保存 模型有2种方法: 方法 1.使用TensorFlow模型保存函数 save = tf.train.Saver() ...... saver.save(sess,"checkpoint/model.ckpt",global_step=step)* 得到3个结果 model.ckpt-129220.data-00000-of-00001#保存了模型的所有变量的值. model.ckpt-129220.index model.ckpt-129220.meta # 保存了graph

通过7个python函数理解区块链

我想对于那里的很多人来说,区块链就是这种现象,很难不让你头脑发热.我开始观看视频和阅读文章,但对我个人而言,直到我编写自己的简单区块链,我才真正理解它是什么以及它的潜在应用价值. 我对区块链的看法是它是一个公开的加密数据库.如果你是亚马逊并且你想使用该技术来跟踪库存水平,那么使用区块链是否有意义?可能没有,因为你的客户不想花费资源来验证你的区块链,因为他们只顾看着网站说Only 1 left!. 我会让你考虑未来的应用.所以不用多说,让我们看看我们的7个函数! def hash_function

【error】OutOfRangeError (see above for traceback): RandomShuffleQueue

前言 在使用tensorflow TFRecord的过程中,读取*.tfrecord文件时出现错误,本文解决这个错误. 错误描述: OutOfRangeError (see above for traceback): RandomShuffleQueue '_1_shuffle_batch/random_shuffle_queue' is closed and has insufficient elements (requested 64, current size 62) [[Node: sh

JavaScript正则表达式检验与递归函数实际应用

JS递归函数(菲波那切数列) 实例解析: 一组数字:0  1  1  2  3  5  8  13 0  1  2  3  4  5  6  7 sl(0)=0; sl(1)=1; sl(2)=sl(0)+sl(1); sl(3)=sl(1)+sl(2); function sl(i){ if(i==0){ return  0; }else if(i==1){ return  1; }else{ return  sl(i-1)+sl(i-2); } } 正则表达式检验 //校验是否全由数字组成