[英]Pytorch: merging two models (nn.Module)
我有一个非常复杂的模型,因此我不能只调用self.fc.weight
等,所以我想以某种方式迭代模型。
目标是以这种方式合并模型: m = alpha * n + (1 - alpha) * o
其中m
n
和o
是同一类但训练不同的实例。 因此,对于这些模型中的每个参数,我想根据方程中所述的n
和o
为m
分配初始值,然后仅使用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.