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 脚本)。
我尝试使用 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 脚本)。