【发布时间】:2020-03-02 23:11:10
【问题描述】:
我有一个非常复杂的模型,因此我不能只调用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
但这不会在mm内分配新值。
for p1, p2, p3 in zip(m.parameters(), n.parameters(), o.parameters()):
p1.fill_(alpha * p2 + (1 - alpha) * p3)
但这会引发
RuntimeError: 一个需要 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 中是否有更好的方法来做到这一点?是否有可能出现梯度错误?
【问题讨论】: