如何修复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
如何修复 Colab 上的“错误:pytorch3d 构建***失败”错误?
如何修复pytorch'RuntimeError:类型为torch.cuda.LongTensor但发现类型为torch.LongTensor的预期对象'