【发布时间】:2018-12-14 06:30:36
【问题描述】:
由于某种原因,在重新加载我使用 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) 只有在 train_1() 函数中声明的变量,即发生训练和实例化 saver 的函数,在调用 saver.restore() 时使用之前的值进行初始化
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
谢谢!
【问题讨论】:
标签: python-3.x tensorflow