CNTK/TF 从文件加载后 LSTM 模型性能下降

CNTK/TF LSTM model performance degrades after loading from file

我尝试使用 CNTK 和 TF 在虚拟数据集上实现 char-LSTM 分类模型,这两个模型在完美数据集上都达到了 100% 的准确率(我现在不担心过度拟合)。

然而,一旦完成训练并将模型保存到文件并恢复,模型似乎忘记了他们的训练并且在同一数据集上表现不佳。

我比较了训练后和恢复后 LSTM 和密集层的权重和偏差,它们完美匹配。我觉得还有一些东西需要恢复(可能是 LSTM 状态?),以便模型再次开始准确运行。

恢复的 LSTM 模型是否需要以某种方式 "primed" 才能再次开始满负荷运行?

代码和数据集可用 here

此问题与 saving/loading LSTM 无关。

在Python中,将集合转换为列表时,结果未排序且与运行不同 运行:

In [1]: list(set(['t', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 's', 'p', 'a', 'm']))
Out[1]: ['s', 'a', 'm', 't', 'h', 'p', 'i', ' ']

In [1]: list(set(['t', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 's', 'p', 'a', 'm']))
Out[1]: [' ', 'h', 'a', 't', 'm', 'i', 'p', 's']

因此,在您的代码中,不同的字符在 运行 运行 的向量中得到不同的位置,因此性能只是随机的。

只需将 all_chars = list(set(all_chars)) 更改为 all_chars = sorted(set(all_chars)) 即可解决问题(我只验证了 CNTK 脚本)。