首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从图形处理器中的60分钟闪电战训练PyTorch分类器时出错

从图形处理器中的60分钟闪电战训练PyTorch分类器时出错
EN

Stack Overflow用户
提问于 2018-11-02 01:29:10
回答 1查看 284关注 0票数 1

我在jupyter实验室通过他们的官方60分钟闪电战教程(使用他们的.ipynb文件,link to the tutorial)开始学习pytorch,并且已经成功地完成了它,直到使用gpu进行分类器的转换和训练。我想我已经成功地根据这些结果改变了网络、输入和标签的设备:

代码语言:javascript
运行
复制
net=net.to(device)
net.fc1.weight.type()

带输出:

代码语言:javascript
运行
复制
'torch.cuda.FloatTensor'

和:

代码语言:javascript
运行
复制
inputs, labels = inputs.to(device), labels.to(device)
inputs.type(),labels.type()

带输出:

代码语言:javascript
运行
复制
('torch.cuda.FloatTensor', 'torch.cuda.LongTensor')

在运行这些单元之后,我运行了用于训练模型的单元,其中包含以下代码:

代码语言:javascript
运行
复制
for epoch in range(2):  # loop over the dataset multiple times

running_loss = 0.0
for i, data in enumerate(trainloader, 0):
    # get the inputs
    inputs, labels = data

    # zero the parameter gradients
    optimizer.zero_grad()

    # forward + backward + optimize
    outputs = net(inputs)
    loss = criterion(outputs, labels)
    loss.backward()
    optimizer.step()

    # print statistics
    running_loss += loss.item()
    if i % 2000 == 1999:    # print every 2000 mini-batches
        print('[%d, %5d] loss: %.3f' %
              (epoch + 1, i + 1, running_loss / 2000))
        running_loss = 0.0

print('Finished Training') 

并收到此错误:

代码语言:javascript
运行
复制
RuntimeError                              Traceback (most recent call last)
<ipython-input-55-fe85c778b0e6> in <module>()
     10 
     11         # forward + backward + optimize
---> 12         outputs = net(inputs)
     13         loss = criterion(outputs, labels)
     14         loss.backward()

~\Anaconda3\lib\site-packages\torch\nn\modules\module.py in __call__(self, 
*input, **kwargs)
    475             result = self._slow_forward(*input, **kwargs)
    476         else:
--> 477             result = self.forward(*input, **kwargs)
    478         for hook in self._forward_hooks.values():
    479             hook_result = hook(self, input, result)

<ipython-input-52-725d44154459> in forward(self, x)
    14 
    15     def forward(self, x):
--->16         x=self.conv1(x)
    17         x = self.pool(F.relu(x))
    18         x = self.pool(F.relu(self.conv2(x)))

~\Anaconda3\lib\site-packages\torch\nn\modules\module.py in __call__(self, 
*input, **kwargs)
    475             result = self._slow_forward(*input, **kwargs)
    476         else:
--> 477             result = self.forward(*input, **kwargs)
    478         for hook in self._forward_hooks.values():
    479             hook_result = hook(self, input, result)

~\Anaconda3\lib\site-packages\torch\nn\modules\conv.py in forward(self, 
input)
    299     def forward(self, input):
    300         return F.conv2d(input, self.weight, self.bias, self.stride,
--> 301                         self.padding, self.dilation, self.groups)
    302 
    303 

RuntimeError: Expected object of type torch.FloatTensor but found type 
torch.cuda.FloatTensor for argument #2 'weight' 

为什么我会收到这个错误,我如何修复它?

EN

回答 1

Stack Overflow用户

发布于 2018-12-02 03:30:00

您还需要在训练循环中将inputslabels移动到GPU。

代码语言:javascript
运行
复制
for i, data in enumerate(trainloader, 0):
    # get the inputs
    inputs, labels = data

    # move to GPU
    inputs = inputs.to(device)
    labels = labels.to(device)

    ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53106369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档