繁体   English   中英

Pytorch:合并两个模型(nn.Module)

[英]Pytorch: merging two models (nn.Module)

我有一个非常复杂的模型,因此我不能只调用self.fc.weight等,所以我想以某种方式迭代模型。

目标是以这种方式合并模型: m = alpha * n + (1 - alpha) * o其中m no是同一类但训练不同的实例。 因此,对于这些模型中的每个参数,我想根据方程中所述的nom分配初始值,然后仅使用m继续训练过程。

我试过:

for p1, p2, p3 in zip(m.parameters(), n.parameters(), o.parameters()):
    p1 = alpha * p2 + (1 - alpha) * p3

但这不会m分配新值。

for p1, p2, p3 in zip(m.parameters(), n.parameters(), o.parameters()):
    p1.fill_(alpha * p2 + (1 - alpha) * p3)

但这会抛出

运行时错误:在就地操作中使用了需要 grad 的叶变量。

所以我求助于一个工作

m.load_state_dict({
    k: alpha * v1 + (1 - alpha) * v2 
    for (k, v1), (_, v2) in zip(n.state_dict().items(), o.state_dict().items())
})

在 Pytorch 中是否有更好的方法来做到这一点? 是否有可能出现梯度错误?

如果我理解正确,那么您需要摆脱 PyTorch 的 autograd 机制,您只需执行以下操作即可

p1.data = alpha * p2.data+ (1 - alpha) * p3.data

参数的数据不在参数本身中,而是在data成员中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM