我有30个时期的训练过的张量流seq2seq模型,并为每个时期保存了一个检查点。我现在要做的是结合这些检查点中最好的X(基于开发集上的结果)。具体来说,我正在寻找一种方法,让我可以平均不同的模型权重,并将它们合并到一个可用于解码的新模型中。但是,似乎没有一种固定方式,加载不同的模型可能有点棘手。但即使这成功了,我也找不到如何在新模型中组合权重的好答案。
非常感谢任何帮助。
相关问题(在我看来没有充分回答):
Building multiple models in the same graph
How to load several identical models from save files into one session in Tensorflow
答案 0 :(得分:2)
首先,一些术语:
在合奏(根据我的理解),您在测试时拥有N个模型,并结合他们的预测(通过投票,甚至更好地结合概率分布)并且在自回归seq2seq解码器的情况下用作进一步解码的输入)。您可以拥有独立合奏(从头开始独立训练每个模型,使用不同的随机初始化)或检查点合奏(使用N个最后检查点,或者可能具有最佳验证分数的N个检查点) 。参见例如Sennrich et al., 2017用于比较这两种类型的合奏。
在平均值中,您平均N个模型的权重,因此在测试时您只有一个平均模型。这通常比真实的合奏更糟糕,但速度要快得多,因此您可以承受更高的N.如果模型完全独立地进行不同的随机初始化训练,则平均不起作用。但是,如果模型共享合理数量的初始训练步骤,则平均可能有效。一个特殊情况是检查点平均,其中最后N个检查点被平均,但您甚至可以尝试“分叉”训练并使用“半独立”模型进行平均(除了检查点平均)。使用常量或周期性学习率可能非常有用,请参阅Izmailov et al., 2018。
至于你的问题,如何对Tensorflow检查点进行平均: 请参阅avg_checkpoints.py或t2t-avg-all。
答案 1 :(得分:-1)
平均几个模型的权重以产生新的权重不太可能产生有用的结果。
举一个简单的例子,想想像AlexNet这样的经典CNN。它的第一层将包含一系列2d滤镜,以寻找不同的图像特征。对于您从头开始训练的每个模型,过滤器中可能会出现类似的功能,但它们发生的顺序会有很大差异,因此只需平均权重就会破坏大部分信息。