Pytorch 错误:“运行时错误:mat1 和 mat2 形状无法相乘(32x150528 和 784x512)”

问题描述 投票:0回答:0

我正在尝试通过 Pytorch 训练模型。该数据集属于我,它有 2 个文件夹:train_data 和 test_data。每个文件夹都有 2 个文件夹:Detected 和 not_Detected(这些是我的类)。在每个文件夹中,都有许多不同尺寸的 png 图像,我总是会遇到关于图像尺寸的异常。顺便说一句,在此之前,我已经使用 MNIST 数据集运行了代码并且它有效。 这是我的代码:

import torch
import torch.nn as nn
from torch.utils.data import Dataset
from torchvision import datasets
import torch.optim as optim
import os
from PIL import Image

import torchvision.transforms as transforms
from torch.utils.data import DataLoader

is_gpu = torch.cuda.is_available()

class CustomDataset(Dataset):
    def __init__(self, root_dir, transform=None):
        self.root_dir = root_dir
        self.transform = transform
        self.classes = os.listdir(root_dir)
        self.data = []
        self.targets = []

        for class_idx, class_name in enumerate(self.classes):
            class_dir = os.path.join(root_dir, class_name)
            for filename in os.listdir(class_dir):
                img_path = os.path.join(class_dir, filename)
                self.data.append(img_path)
                self.targets.append(class_idx)

    def __len__(self):
        return len(self.data)

    def __getitem__(self, idx):
        img_path = self.data[idx]
        target = self.targets[idx]

        img = Image.open(img_path).convert('RGB')  # Resmi aç ve RGB formatına dönüştür

        if self.transform is not None:
            img = self.transform(img)

        return img, target

transform = transforms.Compose([
    transforms.Resize((256, 256)),  # Resmi istenen boyuta dönüştürmek için kullanılabilir
    transforms.RandomCrop((224, 224)),
    transforms.ToTensor()
])

train_dataset = CustomDataset(root_dir=r'C:\Users\enis_\Desktop\yololu\train_data', transform=transform)
test_dataset = CustomDataset(root_dir=r'C:\Users\enis_\Desktop\yololu\test_data', transform=transform)

train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)


model = nn.Sequential(nn.Flatten(),
                     nn.Linear(28*28,512),
                     nn.ReLU(),
                     nn.Linear(512,256),
                     nn.ReLU(),
                     nn.Linear(256,10))

if is_gpu:
    model = model.cuda()

print(model)

criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(),lr=0.7)

epochs = 5

for i in range(epochs):
    train_loss = 0.0
    for data,label in train_loader:
        if is_gpu:
            data, label = data.cuda(), label.cuda()
        optimizer.zero_grad()
        
        output = model(data)
        loss = criterion(output,label)
        loss.backward()
        
        optimizer.step()
        
        train_loss += loss.item() * data.size(0)
    print(f'Epoch: {i+1} / {epochs} \t\t\t Training Loss:{train_loss/len(train_loader)}')

这是输出:

顺序( (0):展平(start_dim=1,end_dim=-1) (1):线性(in_features=784,out_features=512,偏差=True) (2):ReLU() (3):线性(in_features=512,out_features=256,bias=True) (4):ReLU() (5):线性(in_features=256,out_features=10,bias=True) ) 回溯(最近一次调用最后一次): 文件“c:\Users nis_\Desktop\yololu empCodeRunnerFile.py”,第 80 行,位于 输出=模型(数据) ^^^^^^^^^^^ 文件“C:\ Users nis_ \ AppData \ Local \ Packages \ PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0 \ LocalCache \ local-packages \ Python311 \ site-packages orch n\modules\module.py”,第 1501 行,在 call_impl 中 返回forward_call(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件“C:\ Users nis \ AppData \ Local \ Packages \ PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0 \ LocalCache \ local-packages \ Python311 \ site-packages orch n\模块

deep-learning pytorch dataset object-detection tensor
© www.soinside.com 2019 - 2024. All rights reserved.