Deep learning opt.step()未更新模型的权重
它的输出是Deep learning opt.step()未更新模型的权重,deep-learning,pytorch,Deep Learning,Pytorch,它的输出是 print(self.global_model.state_dict()) print("total_loss",total_loss) total_loss.backward() self.opt.step() print(self.global_model.state_dict()) 更新 如果我这样做 self.opt = torch.optim.SGD(self.global_model.parameters(),lr = 0.01)
print(self.global_model.state_dict())
print("total_loss",total_loss)
total_loss.backward()
self.opt.step()
print(self.global_model.state_dict())
更新
如果我这样做
self.opt = torch.optim.SGD(self.global_model.parameters(),lr = 0.01)
它更新局部模型的权重但我需要把这个梯度应用到其他模型上。那么我需要做什么呢?这个问题没有足够的信息。您的类(
self
)和self.global\u模型
是如何定义的?您如何通过模型传递数据?如何计算总损失?如果我不得不猜测的话,我会说要么你正在破坏计算图(在某处使用类似于.detach
的东西),要么总损耗的值与全局模型中的参数无关。这两个问题中的任何一个都会导致总损失.backward()
不更新全局\u模型中的梯度。任何人都无法确定哪一个,除非你发布一个。我发现我使用了.detach()来获取张量的值。我编辑了它,问题就解决了。这个问题没有足够的信息。您的类(self
)和self.global\u模型
是如何定义的?您如何通过模型传递数据?如何计算总损失?如果我不得不猜测的话,我会说要么你正在破坏计算图(在某处使用类似于.detach
的东西),要么总损耗的值与全局模型中的参数无关。这两个问题中的任何一个都会导致总损失.backward()
不更新全局\u模型中的梯度。任何人都无法确定哪一个,除非你发布一个。我发现我使用了.detach()来获取张量的值。我编辑了它,问题就解决了
self.opt = torch.optim.SGD(self.global_model.parameters(),lr = 0.01)
print(self.local_model.state_dict())
print("total_loss.backward()",total_loss)
total_loss.backward()
opt_2 = torch.optim.SGD(self.local_model.parameters(),lr = 0.01)
opt_2.step()
self.opt.step()
print(self.local_model.state_dict())