TensorDataSet出现size mismatch between tensors错误,多输入对应单输出求助
解决TensorDataset输入输出尺寸不匹配问题
问题根源在于TensorDataset要求输入和输出的第一维度(样本数)必须完全一致。你当前的输入形状是[4,64,64],输出是[64,64],第一维度分别为4和64,自然会触发尺寸不匹配错误。
根据你的需求——每个输入的同位置值对应输出的同位置值,正确的做法是把每个空间位置(共64×64个)当作一个独立样本,调整张量形状让样本数对齐:
具体步骤
- 调整输入张量:将
[4,64,64]转换为[64×64,4],把4个输入矩阵的同位置值作为单个样本的特征。 - 调整输出张量:将
[64,64]展平为[64×64](或[64×64,1]),每个位置的值作为对应样本的标签。
代码示例
import torch from torch.utils.data import TensorDataset # 模拟你的输入输出 inputs = torch.randn(4, 64, 64) # 4个64x64输入矩阵 outputs = torch.randn(64, 64) # 1个64x64输出矩阵 # 重排并重塑输入:把通道维度移到最后,再展平空间维度 inputs_reshaped = inputs.permute(1, 2, 0).reshape(-1, 4) # 展平输出为一维张量 outputs_reshaped = outputs.reshape(-1) # 现在可以正常创建TensorDataset dataset = TensorDataset(inputs_reshaped, outputs_reshaped) # 验证形状:输入样本数=输出样本数=64*64=4096 print(inputs_reshaped.shape) # torch.Size([4096, 4]) print(outputs_reshaped.shape) # torch.Size([4096])
逻辑说明
这样调整后,每个样本对应4个输入矩阵的(i,j)位置值,以及输出矩阵的(i,j)位置值,完全符合你想要的“4个输入对应1个输出位置关联”的需求,同时满足TensorDataset对样本数一致的要求。
内容的提问来源于stack exchange,提问作者PytorchLearn
相关产品推荐
相关产品推荐

