RuntimeError:矩阵形状不匹配求助(64x64彩色图片适配教程模型)
解决PyTorch中mat1与mat2形状不匹配的RuntimeError
错误原因
你的输入是64x64的彩色图片,经过ToTensor()转换后,每个样本的张量形状为[3, 64, 64](3个颜色通道)。经过nn.Flatten()展平后,每个样本的特征数为3*64*64=12288,但模型第一个全连接层nn.Linear(64*64, 512)的输入维度仅设置为单通道的64*64=4096,导致矩阵乘法时维度不匹配。错误信息中的62是最后一批数据的样本数(总数据量无法被batch_size=64整除),属于正常现象。
两种解决方案
方案1:适配彩色图片的通道数(推荐)
直接修改模型第一个全连接层的输入维度为3*64*64=12288:
class NeuralNetwork(nn.Module): def __init__(self): super().__init__() self.flatten = nn.Flatten() self.linear_relu_stack = nn.Sequential( nn.Linear(3*64*64, 512), # 修改此处为3*64*64 nn.ReLU(), nn.Linear(512, 512), nn.ReLU(), nn.Linear(512, 10) ) def forward(self, x): x = self.flatten(x) logits = self.linear_relu_stack(x) return logits
方案2:将彩色图转为灰度图处理
如果不需要彩色信息,可以在数据加载时添加Grayscale()转换,保持原模型结构不变:
from torchvision.transforms import Compose, Grayscale, ToTensor # 修改dataset的transform参数 dataset = CustomImageDataset( "./Mr_Ai/dataset.csv", "./Mr_Ai/dataset/", transform=Compose([Grayscale(), ToTensor()]) # 新增灰度转换 )
验证修改
修改后重新运行代码,即可解决形状不匹配的问题。若后续仍有错误,可检查:
- 数据集标注文件中的标签是否与模型最后一层输出维度(10)匹配
- 图片路径是否正确,确保所有图片都能正常加载
内容的提问来源于stack exchange,提问作者Mr_Wamsy
相关产品推荐
相关产品推荐

