如何修复pytorch中的“输入和隐藏张量不在同一设备上”

Posted

技术标签:

【中文标题】如何修复pytorch中的“输入和隐藏张量不在同一设备上”【英文标题】:How to fix 'Input and hidden tensors are not at the same device' in pytorch 【发布时间】:2020-01-25 11:35:06 【问题描述】:

当我想将模型放在 GPU 上时,我收到以下错误:

"RuntimeError: Input and hidden tensor is not at the same device, found input tensor at cuda:0 and hidden tensor at cpu"

但是,以上所有内容都已放在 GPU 上:

for m in model.parameters():
    print(m.device) #return cuda:0
if torch.cuda.is_available():
    model = model.cuda()
    test = test.cuda() # test is the Input

Windows 10 服务器 Pytorch 1.2.0 + cuda 9.2 cuda 9.2 cudnn 7.6.3 用于 cuda 9.2

【问题讨论】:

Running LSTM with multiple GPUs gets "Input and hidden tensors are not at the same device"的可能重复 您还需要将输入发送到 cuda。所以例如你的 X_train_batch 和 label_batch 等...... 【参考方案1】:

您需要将模型、输入和目标移动到 Cuda:

if torch.cuda.is_available():
   model.cuda()
   inputs = inputs.cuda() 
   target = target.cuda()

【讨论】:

【参考方案2】:

当 PyTorch 尝试计算存储在 CPU 上的张量和 GPU 上的张量之间的操作时,会发生此错误。在高层次上,有两种类型的张量——你的数据的张量和模型参数的张量,两者都可以像这样复制到同一个设备:

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

data = data.to(device)
model = model.to(device)

【讨论】:

以上是关于如何修复pytorch中的“输入和隐藏张量不在同一设备上”的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 Pytorch-Forecasting 模型拟合关于序列元素的 ValueError

如何修复数据集以返回所需的输出(pytorch)

如何修复 Colab 上的“错误:pytorch3d 构建***失败”错误?

如何修复pytorch'RuntimeError:类型为torch.cuda.LongTensor但发现类型为torch.LongTensor的预期对象'

PyTorch 非确定性辍学

Pytorch 的“折叠”和“展开”是如何工作的?