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

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

关于这个问题,任何帮助都将是有用的

提前感谢


回答:

在训练过程中最好合并权重更新(梯度)并保持一套共同的权重,而不是尝试在各个训练完成后合并权重。两个独立训练的网络可能会找到不同的最优解,例如,平均权重可能会得到一个在两个数据集上表现更差的网络。

你可以做两件事:

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

在这种情况下,通常会:

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

(上述有变体以避免计算节点等待其他节点结果的时间过长而闲置)。上述假设在训练过程中,运行在计算节点上的Tensorflow进程可以相互通信。

查看https://www.tensorflow.org/deploy/distributed获取更多详细信息和如何在多个节点上训练网络的示例。


  1. 如果你确实需要分别训练网络,请查看集成学习,例如这个页面:https://mlwave.com/kaggle-ensembling-guide/。简而言之,你将在各自的机器上训练单个网络,然后例如使用两个网络输出的平均值或最大值作为组合分类器/预测器。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注