【发布时间】:2022-08-22 19:15:49
【问题描述】:
我正在尝试使用 PyTorch 查找道路车道。我创建了数据集和我的模型。但是当我尝试训练我的模型时,我得到mat1 and mat2 shapes cannot be multiplied (4x460800 and 80000x16) 错误。我尝试过其他主题的解决方案,但这些解决方案对我帮助不大。
我的数据集是一堆带有验证图像的道路图像。我有 .csv 文件,其中包含图像名称(例如 \'image1.jpg、image2.jpg\')。图像和验证图像的原始尺寸为 1280x720。我在我的数据集代码中将它们转换为 200x200。
这是我的数据集:
import os
import pandas as pd
import random
import torch
import torchvision.transforms.functional as TF
from torch.utils.data import Dataset
from torchvision import transforms
from PIL import Image
class Dataset(Dataset):
def __init__(self, csv_file, root_dir, val_dir, transform=None):
self.annotations = pd.read_csv(csv_file)
self.root_dir = root_dir
self.val_dir = val_dir
self.transform = transform
def __len__(self):
return len(self.annotations)
def __getitem__(self, index):
img_path = os.path.join(self.root_dir, self.annotations.iloc[index, 0])
image = Image.open(img_path).convert(\'RGB\')
mask_path = os.path.join(self.val_dir, self.annotations.iloc[index, 0])
mask = Image.open(mask_path).convert(\'RGB\')
transform = transforms.Compose([
transforms.Resize((200, 200)),
transforms.ToTensor()
])
if self.transform:
image = self.transform(image)
mask = self.transform(mask)
return image, mask
我的模型:
import torch
import torch.nn as nn
class Net(nn.Module):
def __init__(self):
super().__init__()
self.cnn_layers = nn.Sequential(
# Conv2d, 3 inputs, 128 outputs
# 200x200 image size
nn.Conv2d(3, 128, kernel_size=3, stride=1, padding=1),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2),
# Conv2d, 128 inputs, 64 outputs
# 100x100 image size
nn.Conv2d(128, 64, kernel_size=3, stride=1, padding=1),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2),
# Conv2d, 64 inputs, 32 outputs
# 50x50 image size
nn.Conv2d(64, 32, kernel_size=3, stride=1, padding=1),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2)
)
self.linear_layers = nn.Sequential(
# Linear, 32*50*50 inputs, 16 outputs
nn.Linear(32 * 50 * 50, 16),
# Linear, 16 inputs, 3 outputs
nn.Linear(16, 3)
)
def forward(self, x):
x = self.cnn_layers(x)
x = x.view(x.size(0), -1)
x = self.linear_layers(x)
return x
如何避免此错误并在这些验证图像上训练我的图像?
-
嗯,它看起来像
nn.Linear(32 * 50 * 50, 16)导致这个,你需要尝试用nn.Linear(32 * 50 * 50 * 4, 4)替换该行 -
现在我收到
mat1 and mat2 shapes cannot be multiplied (4x460800 and 320000x4)错误。我想我对这些形状有问题,但我不知道形状应该是什么。
标签: python csv deep-learning pytorch conv-neural-network