Tensorflow tf.train.Saver未在同一过程中加载
我观察到一个奇怪的行为,如果检查点在同一个Python进程中较早保存,则保存程序无法恢复。如果从另一个进程执行,则可以很好地加载。下面是一些简单的代码来说明这个问题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.
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')