尝试火炬堆叠张量列表时出错

Getting error when trying to torch stack a list of tensors

我正在尝试让 cuda 工作,但我需要将训练输入更改为张量。当我尝试这样做时,当我试图将一张张量列表堆叠成一个张量时出现错误。

代码

for epoch in:
        alst = []
        for x, y in loader:
            x = torch.stack(x)
            #x = torch.Tensor(x)
            #x = torch.stack(x).to(device,dtype=float)

x 的形状:张量列表

[tensor([[[0.325],
     [ 0.1257],
     [ 0.1149],
     ...,
     [-1.572],
     [-1.265],
     [-3.574]],
]), tensor([1,2,3,4,5]), tensor(6,5,4,3,2])]

我收到错误

     22             alst = []
     23             for x, y in loader:
---> 24                 x_list = torch.stack(x)
     25 #                 x = torch.Tensor(x)
     26 #                 x = torch.stack(x).to(device,dtype=float)

RuntimeError: Expected object of scalar type Float but got scalar type Long for sequence element 1 in sequence argument at position #1 'tensors'

不确定我做错了什么。我也试过 x = torch.stack(x).to(device,dtype=float) 但还是不行。

输出中的第一个张量是浮点类型,其值用于输入网络,第二个看起来像标签(long 类型)。

此外,第一个是 tensor,而第二个和第三个元素是 vectors(分别具有 69 个元素)。

您不能堆叠 tensors 个不同的形状,因此无论类型如何,这都不起作用。

通过

解压你的x
matrix, vector1, vector2 = x

要删除 type 警告,请通过

vector1vector2 转换为 float
vector1 = vector1.float()

通过 .shape 属性检查它们的形状并采取相应的行动。 虽然您在使用 train_loader 时可能已经有了批量数据。请参阅:DataLoader documentation 了解更多信息并检查您是否正在使用一个。