Pytorch 为优化器加载状态dict时Pytork/设备问题(cpu、gpu)

Pytorch 为优化器加载状态dict时Pytork/设备问题(cpu、gpu),pytorch,Pytorch,嗨,我是从去年夏天开始学习pytorch的学生 state = torch.load('drive/My Drive/MODEL/4 CBAM classifier55') model = MyResNet() model.load_state_dict(state['state_dict']) criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.0003,betas=(0.5,

嗨,我是从去年夏天开始学习pytorch的学生

state = torch.load('drive/My Drive/MODEL/4 CBAM classifier55')

model = MyResNet()
model.load_state_dict(state['state_dict'])

criterion = nn.CrossEntropyLoss()

optimizer = optim.Adam(model.parameters(), lr=0.0003,betas=(0.5,0.999))
optimizer.load_state_dict(state['optimizer'])

model.to(device)
我写了上面这样的代码

RuntimeError                              Traceback (most recent call last)
<ipython-input-26-507493db387a> in <module>()
     56     new_loss.backward()
     57 
---> 58     optimizer.step()
     59 
     60     running_loss += loss.item()

/usr/local/lib/python3.6/dist-packages/torch/autograd/grad_mode.py in decorate_context(*args, **kwargs)
     13         def decorate_context(*args, **kwargs):
     14             with self:
---> 15                 return func(*args, **kwargs)
     16         return decorate_context
     17 

/usr/local/lib/python3.6/dist-packages/torch/optim/adam.py in step(self, closure)
     97 
     98                 # Decay the first and second moment running average coefficient
---> 99                 exp_avg.mul_(beta1).add_(grad, alpha=1 - beta1)
    100                 exp_avg_sq.mul_(beta2).addcmul_(grad, grad, value=1 - beta2)
    101                 if amsgrad:

RuntimeError: expected device cpu but got device cuda:0
运行时错误回溯(最近一次调用)
在()
56新的_损失向后()
57
--->58优化器。步骤()
59
60运行损耗+=损耗项()
/装饰上下文中的usr/local/lib/python3.6/dist-packages/torch/autograd/grad_mode.py(*args,**kwargs)
13定义上下文(*args,**kwargs):
14与自我:
--->15返回函数(*args,**kwargs)
16返回上下文
17
/步骤中的usr/local/lib/python3.6/dist-packages/torch/optim/adam.py(self,closure)
97
98#衰减第一和第二时刻运行平均系数
--->99 exp_avg.mul(beta1).add(梯度,alpha=1-beta1)
100 exp_avg_sq.mul(beta2)。addcmul(梯度,梯度,值=1-beta2)
101如果amsgrad:
运行时错误:应为设备cpu,但获得设备cuda:0

当我实现训练代码时,我得到了这种错误。当我注释掉“optimizer.load\u state\u dict”时,它工作得很好。我怎样才能解决这个问题?谢谢你的回答。:)

似乎是
状态
在您保存时处于启用状态,现在尝试在
cpu
上使用它,反之亦然。为了避免此错误,一种简单的方法是将
map\u location
参数传递给load


只需在
火炬中传递
map\u location=
。另外,请参见当您保存时,似乎
状态
cuda
上,现在尝试在
cpu
上使用它,反之亦然。为了避免此错误,一种简单的方法是将
map\u location
参数传递给load


只需在
火炬中传递
map\u location=
。另外,请参见state=torch.load('drive/My drive/MODEL/4 CBAM classifier55',map_location=device)我添加了这样的map_location(设备是cuda),但它不起作用。出现相同的错误消息:(有没有办法检查我保存型号的位置(cpu或gpu)?我将'model.的位置更改为(设备)“在声明优化器之前,它是有效的!谢谢你的帮助。嗯!我很高兴它起了作用。一般来说,首先将模型移动到设备,然后声明优化器是一个好主意。这避免了优化器与cpu上的某些部分和gpu上的某些部分混淆的问题。state=torch.load('drive/My drive/MODEL/4 CBAM classifier55',map_location=device)我像这样添加了map_location(设备是cuda),但它不起作用。出现相同的错误消息。:(有没有办法检查我保存模型的位置(cpu或gpu)?我将'MODEL.to(device)的位置更改为“在声明优化器之前,它是有效的!谢谢你的帮助。嗯!我很高兴它起作用了。一般来说,首先将模型移动到设备,然后声明优化器是一个好主意。这避免了优化器与cpu上的某些部分和gpu上的某些部分混淆的问题。