使用 tensorflow 合并在 2 台不同计算机上训练的同一模型的权重

Abh*_*ram 5 artificial-intelligence neural-network keras tensorflow

我正在做一些关于使用 tensorflow 训练深度神经网络的研究。我知道如何训练模型。我的问题是我必须在具有不同数据集的 2 台不同计算机上训练相同的模型。然后保存模型权重。后来我必须以某种方式合并 2 个模型权重文件。我不知道如何合并它们。是否有执行此操作的函数或应该对权重进行平均?

对这个问题的任何帮助都会很有用

提前致谢

And*_*ner 2

最好在训练期间合并权重更新(梯度)并保留一组通用的权重,而不是在单独的训练完成后尝试合并权重。两个单独训练的网络可能会找到不同的最佳值,例如对权重进行平均可能会给出在两个数据集上表现更差的网络。

您可以做两件事:

  1. 看看“数据并行训练”:将训练过程的前向和后向分布分布在多个计算节点上,每个计算节点都有整个数据的子集。

在这种情况下通常:

  • 每个节点通过网络向前传播一个小批量
  • 每个节点通过网络向后传播损失梯度
  • “主节点”从所有节点上的小批量收集梯度并相应地更新权重
  • 并将权重更新分发回计算节点,以确保每个节点都具有相同的权重集

(上述方法有多种变体,以避免计算节点空闲太长时间等待其他节点的结果)。上面假设计算节点上运行的 Tensorflow 进程在训练期间可以相互通信。

请参阅https://www.tensorflow.org/deploy/distributed)了解更多详细信息以及如何在多个节点上训练网络的示例。


  1. 如果您确实单独训练了网络,请查看集成,请参阅此页面: https: //mlwave.com/kaggle-ensembling-guide/。简而言之,您可以在各自的机器上训练各个网络,然后使用两个网络输出的平均值或最大值作为组合的分类器/预测器。