Tensorflow Saver & restore 以及报错问题 NotFoundError: "x_x" not found in checkpoint
2018-03-20 12:46
1236 查看
根据 莫烦Python 的教程 保存模型参数
然后出现以下错误:NotFoundError: Tensor name “weight_1” not found in checkpoint files mynet/save_net.ckpt
浏览网上相关讨论,尝试 restart kernel (Spyder 编辑器)以及 更改 tf.train.Saver(write_version=tf.train.SaverDef.V1) 为 V1 版本均无法正常 restore。
原因:
真正的原因是,我写的代码 保存和加载 在前后进行,在前后两次定义了
相当于 在TensorFlow 图的堆栈创建了两次 name = “weight” 的变量,第二个(第n个)的实际 name 会变成 “weight_1” (“weight_n-1”),之后我们在保存 checkpoint 中实际搜索的是 “weight_n-1” 这个变量 而不是 “weight” ,因此就会出错。
解决方案:
(1)在加载过程中,定义 name 相同的变量前面加
tf.reset_default_graph() 清除默认图的堆栈,并设置全局图为默认图
(2)正常场景下,不会保存模型之后,马上加载(或在同一程序中加载),就不会出现这个情况,或者保存完之后 restart kernel (Spyder 中),再进行参数加载。
# -*- coding: utf-8 -*- """ Created on Tue Mar 20 10:01:04 2018 @author: lyh """ import tensorflow as tf import numpy as np #save W = tf.Variable([[1,2,3],[3,4,5]],dtype=tf.float32,name="weight") init = tf.global_variables_initializer() saver = tf.train.Saver() with tf.Session() as sess: sess.run(init) save_path = saver.save(sess,"mynet/save_net.ckpt") print("Save to path:" + save_path) #load W = tf.Variable(np.arange(6).reshape((2,3)),dtype=tf.float32,name="weight") #不需要init saver = tf.train.Saver() with tf.Session() as sess: saver.restore(sess,save_path) print("weight:" + sess.run(W))
然后出现以下错误:NotFoundError: Tensor name “weight_1” not found in checkpoint files mynet/save_net.ckpt
浏览网上相关讨论,尝试 restart kernel (Spyder 编辑器)以及 更改 tf.train.Saver(write_version=tf.train.SaverDef.V1) 为 V1 版本均无法正常 restore。
原因:
真正的原因是,我写的代码 保存和加载 在前后进行,在前后两次定义了
W = tf.Variable(xxx,name="weight")
相当于 在TensorFlow 图的堆栈创建了两次 name = “weight” 的变量,第二个(第n个)的实际 name 会变成 “weight_1” (“weight_n-1”),之后我们在保存 checkpoint 中实际搜索的是 “weight_n-1” 这个变量 而不是 “weight” ,因此就会出错。
解决方案:
(1)在加载过程中,定义 name 相同的变量前面加
tf.reset_default_graph() 清除默认图的堆栈,并设置全局图为默认图
(2)正常场景下,不会保存模型之后,马上加载(或在同一程序中加载),就不会出现这个情况,或者保存完之后 restart kernel (Spyder 中),再进行参数加载。
相关文章推荐
- FileNotFoundError: [Errno 2] "dot" not found in path.
- TensoFlow slim fine tune "BatchNorm/gamma/RMSProp_1 not found in checkpoint"
- "Procedure EntryPoint XXX Not Found In WS2_32.dll"的解决方案
- Android studio中打包apk出现"XXX" is translated here but not found in default locale的解决问题的方法
- "The string '__checksum' was not found in the string table"解决办法
- 7. Eclipse 报错:Error: Program "sh" not found in PATH
- "action_settings" is not translated in "af"问题
- 'filename.h' file not found with <angled> include, use "quotes" instead. 问题详解
- 【转】Keil调试局部变量显示"not in scope"的问题解决方法
- eclipse 移植cocos2d-x工程 报错: Program "bash" is not found in PATH
- How to resolve "valid signing identity not found" in provisioning profiles library
- Go丨语言package github.com/Go-SQL-Driver/MySQL: exec: "git": executable file not found in %PATH%解决方法
- Eclipse 报错:Error: Program "sh" not found in PATH
- 问题"Caused by: java.lang.ClassNotFoundException:..."
- 用boost asio 获取本地IP遇到"host not found"的问题
- [问题记录]解决警告"ld: warning: directory not found for option XXXX"
- 关于FastReport运行时报错“Class TfrxCheckboxView not found"的问题
- 解决“The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path”问题
- 安卓代码迁移:Program "sh" not found in PATH
- Program "make" is not found in PATH