0

我有一个训练了 30 个 epoch 的 tensorflow seq2seq模型,并为每个 epoch 保存了一个检查点。我现在想做的是结合这些检查点中最好的 X(基于开发集的结果)。具体来说,我正在寻找一种方法,可以让我平均不同的模型权重并将它们合并到一个可用于解码的新模型中。但是,这似乎没有固定的方法,加载不同的模型可能有点棘手。但即使这成功了,我也找不到关于如何在新模型中组合权重的好答案。

任何帮助将不胜感激。

相关问题(我认为没有充分回答):

在同一个图中构建多个模型

如何将多个相同模型从保存文件加载到 Tensorflow 的一个会话中

如何在张量流中创建集成?

4

2 回答 2

2

首先,一些术语:

  • 集成(据我了解)中,您在测试时有 N 个模型,并且您组合它们的预测(通过投票,或者甚至更好地组合概率分布,并在自回归 seq2seq 解码器的情况下用作进一步解码的输入)。您可以拥有独立的集成(从头开始独立训练每个模型,使用不同的随机初始化)或检查点集成(采用最后 N 个检查点,或者可能具有最佳验证分数的 N 个检查点)。参见例如Sennrich et al., 2017对这两种类型的合奏进行比较。

  • 平均时,您平均 N 个模型的权重,因此在测试时您只有一个平均模型。这通常会产生比真实集成更差的结果,但它要快得多,因此您可以承受更高的 N。如果模型是完全独立地使用不同的随机初始化进行训练,则平均根本不起作用。但是,如果模型共享合理数量的初始训练步骤,则平均可能会起作用。一个特殊情况是检查点平均,其中最后 N 个检查点被平均,但您甚至可以尝试“分叉”训练并使用“半独立”模型进行平均(除了检查点平均)。使用恒定或周期性学习率可能非常有用,请参阅Izmailov 等人,2018 年

至于您的问题,如何对 Tensorflow 检查点进行平均:请参阅avg_checkpoints.pyt2t-avg-all

于 2018-05-09T15:27:59.090 回答
-1

对几个模型的权重进行平均以产生一个新模型不太可能产生有用的结果。

举个简单的例子,想想像 AlexNet 这样的经典 CNN。它的第一层将包含一系列寻找不同图像特征的二维过滤器。对于您从头开始训练的每个模型,相似的特征可能会出现在过滤器中,但它们出现的顺序会非常不同,因此仅平均权重会破坏大部分信息。

于 2017-03-20T20:37:55.117 回答