我正在研究使用tensorflow训练深度神经网络。我知道如何训练模型。我的问题是我需要在两台不同的计算机上使用不同的数据集来训练同一个模型。然后保存模型权重。之后我需要以某种方式合并这两个模型权重文件。我不知道如何合并它们。有没有一个函数可以做到这一点,或者应该对权重进行平均?
关于这个问题,任何帮助都将是有用的
提前感谢
回答:
在训练过程中最好合并权重更新(梯度)并保持一套共同的权重,而不是尝试在各个训练完成后合并权重。两个独立训练的网络可能会找到不同的最优解,例如,平均权重可能会得到一个在两个数据集上表现更差的网络。
你可以做两件事:
- 查看“数据并行训练”:将训练过程的前向和后向传递分布在多个计算节点上,每个节点都有一部分完整数据。
在这种情况下,通常会:
- 每个节点通过网络前向传播一个小批量数据
- 每个节点通过网络后向传播损失梯度
- 一个“主节点”收集所有节点上的小批量数据的梯度,并相应地更新权重
- 并将权重更新分发回计算节点,以确保每个节点都有一套相同的权重
(上述有变体以避免计算节点等待其他节点结果的时间过长而闲置)。上述假设在训练过程中,运行在计算节点上的Tensorflow进程可以相互通信。
查看https://www.tensorflow.org/deploy/distributed获取更多详细信息和如何在多个节点上训练网络的示例。
- 如果你确实需要分别训练网络,请查看集成学习,例如这个页面:https://mlwave.com/kaggle-ensembling-guide/。简而言之,你将在各自的机器上训练单个网络,然后例如使用两个网络输出的平均值或最大值作为组合分类器/预测器。