Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/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
Tensorflow tf.train.Saver未在同一过程中加载_Tensorflow - Fatal编程技术网

Tensorflow tf.train.Saver未在同一过程中加载

Tensorflow tf.train.Saver未在同一过程中加载,tensorflow,Tensorflow,我观察到一个奇怪的行为,如果检查点在同一个Python进程中较早保存,则保存程序无法恢复。如果从另一个进程执行,则可以很好地加载。下面是一些简单的代码来说明这个问题 import tensorflow.compat.v1 as tf def train(): W = tf.Variable(tf.zeros([1, 1])) saver = tf.train.Saver() with tf.Session() as sess: sess.run(tf.

我观察到一个奇怪的行为,如果检查点在同一个Python进程中较早保存,则保存程序无法恢复。如果从另一个进程执行,则可以很好地加载。下面是一些简单的代码来说明这个问题

import tensorflow.compat.v1 as tf

def train():
    W = tf.Variable(tf.zeros([1, 1]))
    saver = tf.train.Saver()

    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        saver.save(sess, "./model.ckpt")

def predict():
    W = tf.Variable(tf.zeros([1, 1]))
    saver = tf.train.Saver()

    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        saver.restore(sess, "./model.ckpt")

train()
predict()
在这里,我们在同一过程中立即保存和恢复。恢复失败,出现以下错误:

Key Variable_1 not found in checkpoint
但是如果我从一个新的Python进程中再次运行predict()代码,它就可以正常工作

#train()
predict()

我在这里做错了什么吗?

预测之后,如果您运行:

print([v for v in tf.trainable_variables()])
您将看到正在创建两个不同的变量。这就是TF无法恢复第二个值的原因


为了将两个变量链接到一个变量中,您可以:

  • 将字典传递给的参数
    var\u list
    。例如:

    saver = tf.train.Saver({'W': W})
    
    with tf.variable_scope('', reuse=tf.AUTO_REUSE):
        W = tf.get_variable(initializer=lambda: tf.zeros([1, 1]),
                            name='W')
    
  • 创建时使用。例如:

    saver = tf.train.Saver({'W': W})
    
    with tf.variable_scope('', reuse=tf.AUTO_REUSE):
        W = tf.get_variable(initializer=lambda: tf.zeros([1, 1]),
                            name='W')
    

之后预测
,如果您运行:

print([v for v in tf.trainable_variables()])
您将看到正在创建两个不同的变量。这就是TF无法恢复第二个值的原因


为了将两个变量链接到一个变量中,您可以:

  • 将字典传递给的参数
    var\u list
    。例如:

    saver = tf.train.Saver({'W': W})
    
    with tf.variable_scope('', reuse=tf.AUTO_REUSE):
        W = tf.get_variable(initializer=lambda: tf.zeros([1, 1]),
                            name='W')
    
  • 创建时使用。例如:

    saver = tf.train.Saver({'W': W})
    
    with tf.variable_scope('', reuse=tf.AUTO_REUSE):
        W = tf.get_variable(initializer=lambda: tf.zeros([1, 1]),
                            name='W')