Pytorch CNN模型的参数返回无
我创建了一个CNN模型,像这样Pytorch CNN模型的参数返回无,pytorch,conv-neural-network,federated-learning,Pytorch,Conv Neural Network,Federated Learning,我创建了一个CNN模型,像这样global\u model=CNNMnist(args=args)。然后我将其发送到设备,将其设置为训练。然后,我训练我的本地模型,收集本地的_权重和平均值,得到更新的全局_模型。 现在我正试图从.parameters()函数中获取项目,但得到的只是None作为item.grad。当我对本地_模型做同样的事情时,我得到了期望的输出。我做错了什么 global_model.to(device) global_model.train() ...............
global\u model=CNNMnist(args=args)
。然后我将其发送到设备,将其设置为训练。然后,我训练我的本地模型,收集本地的_权重和平均值,得到更新的全局_模型。
现在我正试图从.parameters()
函数中获取项目,但得到的只是None
作为item.grad
。当我对本地_模型做同样的事情时,我得到了期望的输出。我做错了什么
global_model.to(device)
global_model.train()
...................
global_weights = average_weights(local_weights)
global_model.load_state_dict(global_weights)
last_update = []
for item in global_model.parameters():
last_update.append(copy.deepcopy(item.grad))
print(item.grad)
Output: None None None None None None None None
任何帮助都将不胜感激。您正在查看从
状态加载的值\u dict
-渐变不会保存在那里。请在呼叫后退()
之后和归零()之前打印.grad
,谢谢您的回复。这很有效。但是我还有另一个问题,backward()
只出现在本地模型更新中。全局_模型通过平均从局部_模型得到的更新权重进行更新。如果不在全局_模型中使用backward()
,如何获得全局_模型的梯度?