由于某种原因,在重新加载我使用tr.train.Saver()训练并保存的模型后,出现FailedPreconditionError。这是我用于重新加载训练模型的会话的代码。
def predict_lowres():
tf.reset_default_graph()
init_img = self.generator_1(input_text, r = tf.AUTO_REUSE)
d = self.discriminator_1(init_img, input_text, is_train = True, r = tf.AUTO_REUSE)
tensor_img = tf.squeeze(tf.cast(init_img, dtype = tf.uint8))
with tf.Session() as sess:
saver = tf.train.import_meta_graph('ckpts/model.ckpt.meta')
saver.restore(sess, tf.train.latest_checkpoint('ckpts'))
names = []
for v in tf.get_default_graph().get_collection('variables'):
names.append(v.name)
print(names)
# init_img = self.generator_1(input_text, r = tf.AUTO_REUSE)
# tensor_img = tf.squeeze(tf.cast(init_img, dtype = tf.uint8))
d, np_img = sess.run([d, tensor_img])
print(d)
imwrite("output_image_lowres.jpg", self.flip_channel_order(np_img, img_dim = 64))
使用一些打印语句调试我的代码后,我意识到了以下
1)将generator_1(),discriminator_1()和train_1()函数中的所有变量都添加到了图中
2)在调用saver.restore()时,仅使用先前的值初始化在train_1()函数中声明的变量,进行训练和实例化saver的函数
3)如果我取消注释上面的两条注释行,则不会调用FailedPreconditionError,并且generator_1()和discriminator_1()中的变量都将被初始化,但是变量张量的值不同于它们的值。另存为。
第三个对我来说尤其奇怪,因为我在这里没有运行任何变量初始化程序。如果有人了解saver.restore()函数的工作原理,以及为什么未按照此处的文档(https://www.tensorflow.org/api_docs/python/tf/train/Saver的建议)对图形中的所有变量都进行初始化,那么任何帮助都将非常有用。
如果有帮助的话,这里是我完整代码的链接:https://github.com/vdopp234/Text2Image/blob/master/model.py
谢谢!
答案 0 :(得分:0)
我认为您在使用变量之前缺少初始化变量的信息。像这样:
with tf.Session() as sess:
tf.run(tf.global_variables_initializer())
有关更多详细信息,请查看此answer。