使用张量流合并在两台不同计算机上训练的同一模型的权重

问题描述 投票:0回答:3

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

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

提前致谢

tensorflow neural-network keras artificial-intelligence
3个回答
4
投票

实际上没有办法合并权重,你不能以任何方式平均或组合它们,因为结果没有任何意义。您可以做的是结合预测,但为此训练课程必须相同。

这不是编程限制,而是理论上的限制。


2
投票

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

您可以做两件事:

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

在这种情况下通常:

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

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

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


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

0
投票

这里的所有答案都已经过时了。

对不同模型的权重进行平均现在是 NLP 和 LLM 研究中相当常见的技术。

成功取决于“彩票网络假设”,在许多情况下,只有小型子网络包含模型的大部分知识,因此在多次训练中对它们进行平均,可以产生一个新模型,其行为有点像其他模型的集合.

© www.soinside.com 2019 - 2024. All rights reserved.