PyTorch报”TypeError: LongStorage must be a 1D or 2D tuple or list “的原因以及解决办法

  • Post category:Python

错误信息 TypeError: LongStorage must be a 1D or 2D tuple or list 通常会在使用PyTorch进行Tensor操作时出现,这个错误的原因是在创建或操作张量时,传入的维度参数不符合规定。

解决这个问题的办法可能因具体情况而异,下面提供一些可能适用的方法:

  1. 检查输入的张量维度是否符合PyTorch张量的要求。例如,一些函数要求的输入维度是 (batch_size, channels, height, width),不符合此格式的张量会触发该错误。在这种情况下,需要重新整理数据并确保其符合要求的维度。

  2. 确保输入的维度是整数型数值而非浮点型数值,因为PyTorch的数据类型要求整数型数值。如果传入了浮点型维度参数,需要将其转换成整数型数值。

  3. 如果代码涉及到多个线程,需要确保线程安全和同步。例如,多个线程同时修改同一个变量可能会导致维度参数出错。

  4. 在某些情况下,该错误可能是由PyTorch的内部错误引起的。如果你认为这是PyTorch内部问题,可以尝试更新PyTorch版本或在PyTorch的GitHub存储库中报告问题。

以下是一个样例代码,演示了维度不符合规范会导致出现该错误信息的现象:

import torch

tensor = torch.tensor([[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]])
s = tensor.shape
new_size = (s[0], s[2], s[2], s[1])
tensor = tensor.reshape(new_size)

执行上述代码会触发错误信息:

TypeError: LongStorage must be a 1D or 2D tuple or list

该错误信息源自最后一行代码。我们可以通过修改维度参数的顺序和数量,使它符合PyTorch规范,重新运行代码:

import torch

tensor = torch.tensor([[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]])
s = tensor.shape
new_size = (s[0], s[1], s[2], s[3])
tensor = tensor.reshape(new_size)
print(tensor.shape)

代码成功运行,没有打印错误信息。

总的来说,要解决 TypeError: LongStorage must be a 1D or 2D tuple or list 错误,需要仔细检查代码中传递给PyTorch的维度参数,确保它们符合PyTorch的规范。如果错误依然无法解决,你可以尝试使用PyTorch的调试工具来解决问题。