在受github存储库启发后,我为聊天机器人构建了seq2seq模型。为了训练聊天机器人,我使用了我的Facebook聊天记录。因为我的大部分聊天都像用英语写的印地文单词。我不得不从头开始训练单词嵌入。我知道该模型将需要大约30-40小时(50000次迭代,批量大小为24)的cpu训练。因此,我学会了使用
tf.train.saver()
保存变量并在将来恢复它们的方法。
要查看我的模型的进度,我制作了模型以在第250次迭代时输出五个输入文本序列的答复。 在训练开始时,我得到的是空白输出(因为令牌是最常见的)。但是经过数千次迭代后,它开始提供最常用的单词作为输出。经过90,000次迭代后,它提供了一些不合逻辑但又不同的输出。因此,我在那里停止了培训。
现在,当我从最新的检查点恢复变量时。我再次得到空行作为输出。这是正常现象还是我的代码中存在某种错误?
代码: Full code
代码段: (从最新检查点还原的代码)
sess = tf.Session()
saver = tf.train.Saver()
saver.restore(sess, tf.train.latest_checkpoint('models/'))
sess.run(tf.global_variables_initializer())
(用于在迭代循环中保存变量的代码)
if (i % 10000 == 0 and i != 0):
savePath = saver.save(sess, "models/pretrained_seq2seq.ckpt", global_step=i)
答案 0 :(得分:1)
兄弟,每次使用全局值初始化程序时,它都会重置:/。训练模型时,仅第一次使用sess.run(tf.global)。用保护程序保存模型后,将其注释掉。因此,下次还原模型时,它将不会重置,并且应该可以正常工作。