pytorch:来自两个网络的损失如何表现?

问题描述 投票:0回答:1

我试图在pytorch中实现the following algorithm in this book, section 13.5

enter image description here

这将需要两个独立的神经网络(在这个问题中,model1model2)。一个人的损失仅取决于其自己的输出[通过delta](由w参数化),另一个(由theta参数化),既依赖于其自己的输出[via ln(pi)],又依赖于另一个的输出[再次,通过三角洲]。

我想分别更新每一个

假设以下模型实现nn.Module

model1 = Mynet1()
model2 = Mynet2()

val1 = model1(input1)
val2 = model2(input2)

self.optimizer1 = optim.Adam(model1.parameters(), lr1)
self.optimizer2 = optim.Adam(model2.parameters(), lr2)

loss1 = f(val1)
loss2 = f(val1, val2)#THIS IS THE INTERESTING PART

optim1.zero_grad()
loss1.backward
optim1.step()

optim2.zero_grad()
loss2.backward
optim2.step()

我理解在loss1上应用向后,然后踩它的优化器会更新model1的参数。

我的问题是在qazxsw poi,qazxsw poi,qazxsw poi上激活同样的情况会发生什么,其中损失2依赖于来自loss2model2的输出?

如何让optimizer2更新不影响model1参数?

python machine-learning pytorch backpropagation
1个回答
2
投票

因为model2只有model2的参数,所以如果你正在做loss2,它只会更新model1

然而,optim2将计算模型1和模型2的参数的渐变,如果你之后执行model2,它将更新模型1的参数。如果您不想为model1的param计算渐变,可以使用optim2.step()将其从计算图中分离出来。

© www.soinside.com 2019 - 2024. All rights reserved.