【问题标题】:CNTK/TF LSTM model performance degrades after loading from file从文件加载后 CNTK/TF LSTM 模型性能下降
【发布时间】:2018-05-28 19:28:31
【问题描述】:

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

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

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

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

代码和数据集可用here

【问题讨论】:

    标签: python tensorflow cntk


    【解决方案1】:

    该问题与保存/加载 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 脚本)。

    【讨论】:

    • 这对我来说是一个令人尴尬的失误。这适用于我用于此示例的玩具数据集,但现在我考虑了一下,我最好保存字典并在后续运行中加载它,以防将来出现一些在训练中没有看到的新字符。
    猜你喜欢
    • 2018-12-18
    • 1970-01-01
    • 2022-10-07
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多