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

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

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

提前感谢


回答:

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

你可以做两件事:

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

在这种情况下,通常会:

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

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

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


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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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