【问题标题】:RuntimeError: Expected object of device type cuda but got device type cpu for argument #1 'self' in call to _th_index_selectRuntimeError:设备类型为 cuda 的预期对象,但在调用 _th_index_select 时获得了参数 #1 'self' 的设备类型 cpu
【发布时间】:2020-10-08 19:43:23
【问题描述】:

有人可以帮我追踪以下错误的根源吗?我不明白 GPU 和 CPU 之间的切换发生在哪里,因为我从一开始就指示 collab 使用 GPU。
同样在错误堆栈跟踪之后,它指向标签,这里可能有什么问题?

提前致谢!

【问题讨论】:

    标签: python pytorch google-colaboratory


    【解决方案1】:

    我建议看一下这个youtube 系列以了解 pytorch 的工作原理。

    对于你的问题,我想你会在这个video找到你的答案

    这个想法是您需要指定要将数据和模型放在 GPU 上。使用方法.to(device),如果您的 GPU 可用,则设备是 cuda,否则您的 cpu,您需要对数据执行相同操作。

    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    model.to(device)
    

    你还需要处理你的数据,我假设你有一个 for 循环来迭代你的批处理,所以你可以这样做:

        for batch in train_loader:
            ***
            x, y = batch[0].to(device), batch[1].to(device)
            ***
    

    【讨论】:

    • 感谢您的快速帮助。一直以来,我都在使用 model.cuda() 并将其替换为 model.to(device) ,我现在可以训练我的模型了。非常感谢:)
    • 很高兴它帮助了你:)
    • 我已经在我的模型和输入中使用.to(device),但我仍然收到此错误。
    • 如果您的模型和批次是 .to(device) 而没有更多上下文,则很难说它来自哪里,如果您有一段代码或一个 repo 以便我可以检查它会有所帮助:)
    猜你喜欢
    • 2020-04-08
    • 1970-01-01
    • 2020-11-22
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 2020-03-07
    • 1970-01-01
    相关资源
    最近更新 更多