TensorDataSet “张量大小不匹配”

-2 投票
1 回答
29 浏览
提问于 2025-04-14 17:11

我有4个大小为64x64的矩阵,我把它们堆叠在一起(用Torch.Stack),变成了一个大小为[4,64,64]的结构,这个结构是我想用来作为TensorDataSet的输入。同时,我还有一个64x64的矩阵,打算用作TensorDataSet的输出。当我把这些输入和输出加载到TensorDataSet(inputs, outputs)里时,出现了大小不匹配的问题。

如果我只用1个输入和1个输出,每个都是64x64的,TensorDataSet是可以接受的。但是我想传入4个输入值,对应1个输出值。比如说,每个输入的[0,0]位置的值和输出的[0,0]位置的值是有关系的。

我尝试使用squeeze方法,但没有成功。

1 个回答

0

如果你仔细查看由 TensorDataset 报出的错误的堆栈跟踪,你会看到:

assert all(tensors[0].size(0) == tensor.size(0) for tensor in tensors)

这段话的意思是,所有的张量(tensor)在第一个维度上必须大小相同(也就是数据集的大小)。

在你的情况中,一个 4x64x64 的张量对应于 一个 64x64 的张量,换句话说,输入到 TensorDataset 的张量形状必须是 (1,4,64,64)(1,64,64),分别对应输入和输出。因此,你需要在这两个张量上添加一个额外的维度(可以使用 None 索引 或者 unsqueeze 方法):

x = torch.rand(4,64,64)
y = torch.rand(64,64)

dataset = TensorDataset(x[None], y[None])

撰写回答