Machine learning 何时使用“分离”
如果我有两个不同的神经网络(由model1和model2参数化)和相应的两个优化器,下面使用model2.parameters而不使用detach()的操作会导致其梯度发生变化吗?我的要求是,我只想计算两个模型参数之间的均方损失,但要更新对应于model1的优化器,保持model2不变Machine learning 何时使用“分离”,machine-learning,neural-network,pytorch,gradient,detach,Machine Learning,Neural Network,Pytorch,Gradient,Detach,如果我有两个不同的神经网络(由model1和model2参数化)和相应的两个优化器,下面使用model2.parameters而不使用detach()的操作会导致其梯度发生变化吗?我的要求是,我只想计算两个模型参数之间的均方损失,但要更新对应于model1的优化器,保持model2不变 opt1 = torch.optim.SGD(self.model1.parameters(), lr=1e-3) opt2 = torch.optim.SGD(self.model2.parameters(),
opt1 = torch.optim.SGD(self.model1.parameters(), lr=1e-3)
opt2 = torch.optim.SGD(self.model2.parameters(), lr=1e-3)
loss = (self.lamb / 2.) * ((torch.nn.utils.parameters_to_vector(self.model1.parameters()) - torch.nn.utils.parameters_to_vector(self.model2.parameters()))**2).sum()
loss.backward()
opt1.step()
通常如何决定是否对任何操作使用分离?如果不使用分离,将计算两者的梯度,但在此代码段中您将只优化与opt1相关的参数。如果您稍后有一个
opt2.step()
,请小心。是的,我稍后有opt2.step()。上面的操作会改变model2.parameters的计算图吗?我不知道你在这里所说的“更改model2.parameters的计算图”是什么意思。我可以告诉您的是,在不分离model2.parameters
的情况下,loss.backward()
将计算所有参数的.grad
(除非您之前禁用了一些参数)。因此,如果您稍后调用opt2.step(),您也将考虑这些渐变(除非您在之前将它们调零)。