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

时间:2018-01-20 17:09:51

标签: tensorflow neural-network keras artificial-intelligence

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

有关此问题的任何帮助都很有用

提前致谢

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

最好在训练期间合并体重更新(渐变)并保持一组共同的权重,而不是在个别训练完成后尝试合并权重。经过单独训练的网络都可以找到不同的最佳网络平均权重可以使网络在两个数据集上表现更差。

您可以做两件事:

  1. 查看数据并行培训':在多个计算节点上分配培训过程的前向和后向传递,每个计算节点都有整个数据的子集。
  2. 在这种情况下通常:

    • 每个节点通过网络向前传播迷你广告
    • 每个节点通过网络向后传播损耗梯度
    • a'主节点'从所有节点上的小批量收集渐变并相应地更新权重
    • 并将权重更新分发回计算节点,以确保每个权重更新具有相同的权重集

    (上面有一些变体可以避免计算节点闲置太久等待其他人的结果)。以上假设在计算节点上运行的Tensorflow进程可以在训练期间相互通信。

    查看https://www.tensorflow.org/deploy/distributed)了解更多详情以及如何在多个节点上训练网络的示例。

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