Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 将字典传递给tensorflow Saver_Python 2.7_Tensorflow - Fatal编程技术网

Python 2.7 将字典传递给tensorflow Saver

Python 2.7 将字典传递给tensorflow Saver,python-2.7,tensorflow,Python 2.7,Tensorflow,在中,声明Saver对象可以将列表或字典作为输入,对于dictionaris,键必须是用于保存或恢复变量的名称。我有一个如下代码: create_network() vars_to_load_list = ... vars_to_load_dict = {v.name:v for v in vars_to_load_list} loader = tf.train.Saver(var_list=vars_to_load_list, max_to_keep=FLAGS.max_epoch) path

在中,声明Saver对象可以将列表或字典作为输入,对于dictionaris,键必须是用于保存或恢复变量的名称。我有一个如下代码:

create_network()
vars_to_load_list = ...
vars_to_load_dict = {v.name:v for v in vars_to_load_list}
loader = tf.train.Saver(var_list=vars_to_load_list, max_to_keep=FLAGS.max_epoch)
path = ...
latest_ckpt = tf.train.latest_checkpoint(path, latest_filename=None)
sess = tf.Session()
ckpt = tf.train.get_checkpoint_state(path)
if ckpt and ckpt.model_checkpoint_path:
  loader.restore(sess, save_path=latest_ckpt)
上述代码有效,但如果我传入变量字典而不是变量列表,即将
loader
的防御更改为:

loader = tf.train.Saver(var_list=vars_to_load_dict, max_to_keep=FLAGS.max_epoch)

然后我得到一个
NotFoundError
,加载程序抱怨在检查点文件中找不到一些张量名称。但我希望两个版本的代码都能工作相同。我遗漏了什么吗?

我找到了问题所在。显然,变量的name属性对应于变量的值,而不是它的张量(如果我对这些概念的理解是正确的)。i、 e.它返回
“my\u var:0”
,而加载程序需要
“my\u var”
。在上述示例中修改字典的定义可以解决此问题:

vars_to_load_dict = {v.name[:-2]:v for v in vars_to_load_list}

我解决了这个问题。显然,变量的name属性对应于变量的值,而不是它的张量(如果我对这些概念的理解是正确的)。i、 e.它返回
“my\u var:0”
,而加载程序需要
“my\u var”
。在上述示例中修改字典的定义可以解决此问题:

vars_to_load_dict = {v.name[:-2]:v for v in vars_to_load_list}