【问题标题】:How to take the average of the weights of two networks?如何取两个网络的权重的平均值?
【发布时间】:2018-07-11 15:06:06
【问题描述】:

假设在 PyTorch 我有 model1model2 具有相同的架构。他们接受了相同数据的进一步培训,或者一个模型是另一个模型的早期版本,但它在技术上与问题无关。现在我想将model 的权重设置为model1model2 的权重的平均值。我将如何在 PyTorch 中做到这一点?

【问题讨论】:

  • 你为什么要这样做?权重的平均值根本没有任何意义。
  • 例如我可以做波利亚科夫平均。
  • 无论您想对权重进行什么转换,都不会产生任何有意义的值,即具有高精度或低损失。
  • 如前所述,我怀疑它的价值,但看看this 是否有任何帮助。您可以获取参数、转换并加载它们,但要确保尺寸匹配。
  • @Littleone 谢谢!我会试试的:)

标签: python neural-network deep-learning pytorch


【解决方案1】:
beta = 0.5 #The interpolation parameter    
params1 = model1.named_parameters()
params2 = model2.named_parameters()

dict_params2 = dict(params2)

for name1, param1 in params1:
    if name1 in dict_params2:
        dict_params2[name1].data.copy_(beta*param1.data + (1-beta)*dict_params2[name1].data)

model.load_state_dict(dict_params2)

取自pytorch forums。您可以获取参数,转换并加载它们,但要确保尺寸匹配。

我也很想知道你对这些的发现..

【讨论】:

  • 谢谢 :) !通常在 stackoverflow 中,当您链接到外部源时,您还希望重新复制答案中的相关信息,因为该链接最终可能会变成死链接,或者那里的信息可能会发生变化。我赞成,但如果您可以通过重新复制您链接到的页面的相关部分来提供完整的答案,我将能够接受答案。
  • @patapouf_ai 不知道。谢谢。
猜你喜欢
  • 2020-04-01
  • 2017-02-21
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
  • 2019-02-19
相关资源
最近更新 更多