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())