tensorflow - 恢复保存的训练变量后,保存的 tensorflow NLP 模型不输出任何内容
问题描述
在受到 github repo 的启发后,我为聊天机器人构建了一个 seq2seq 模型。为了训练聊天机器人,我使用了我的 Facebook 聊天记录。因为我的大部分聊天都像是用英语写的印地语单词。我必须从头开始训练词嵌入。我知道该模型将需要大约 30-40 小时(500000 次批量大小为 24 的迭代)在 cpu 上进行训练。所以,我学会了使用
tf.train.saver()
方法来保存变量并在将来恢复它们。
为了查看我的模型的进度,我制作了模型以在每 250 次迭代时输出五个输入文本序列的回复。在培训开始时,我得到了空白输出(因为令牌是最常见的)。但经过几千次迭代后,它开始给出最常见的单词作为输出。经过 90,000 次迭代后,它给出了一些不合逻辑但不同类型的输出。所以,我停止了那里的训练。
现在,当我从最新的检查点恢复变量时。我再次得到空行作为输出。这是正常行为还是我的代码中存在某种错误。
代码: 完整代码
代码片段:(从最新检查点恢复的代码)
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)
解决方案
兄弟,每次你使用全局值初始化器时,它都会重置,:/。训练模型时仅第一次使用 sess.run(tf.global)。使用保护程序保存模型后,将其注释掉。所以下次你恢复模型时它不会重置,它应该可以正常工作。
推荐阅读
- angular - 升级到 Angular 10 后,VS 代码编辑器中的装饰器出错
- javascript - 关闭在Javascript的while循环内不更新
- javascript - 小数点位置由程序确定
- spring-boot - Spring Integration 聚合器仅发布一组来自 AMQP 支持的通道
- c++ - 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件为“sin.txt”,另一个为“cos.txt”,我想将它们分别绘制在一张图上
- javascript - 如何在倒计时中制作双重“如果”条件
- reactjs - 使用 aws s3 和 cloudfront 托管 React 应用程序。任何人都可以建议配置以访问动态 url 吗?
- php - mysqli准备好的语句不返回值
- python - 无法在 ubuntu 中创建 docker 映像
- java - 易于使用的java项目数据库