【发布时间】:2021-05-25 15:34:33
【问题描述】:
我想用 Cnn 制作模型。但它总是显示张量大小错误。我在代码的任何部分都找不到这种大小!可以使用两个类参数,当我将其更改为 4 时它会发生 这是我的代码
from __future__ import print_function, division
import torch
import torch.nn as nn
import torch.optim as optim
from torch.optim import lr_scheduler
import torchvision
from torchvision import datasets, models, transforms
import matplotlib.pyplot as plt
import numpy as np
import time
import os
import copy
import os
import shutil
import re
two_train = "/Data/train/2"
two_val = "/Data/val/2"
nine_train = "/Data/train/9"
nine_val = "/Data/val/9"
seven_train = "/Data/train/7"
seven_val = "/Data/val/7"
eight_train = "/Data/train/8"
eight_val = "/Data/val/8"
two_files = os.listdir(two_train)
nine_files = os.listdir(nine_train)
seven_files = os.listdir(seven_train)
eight_files = os.listdir(eight_train)
# Make transforms and use data loaders
# We'll use these a lot, so make them variables
mean_nums = [0.485, 0.456, 0.406]
std_nums = [0.229, 0.224, 0.225]
chosen_transforms = {'train': transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean_nums, std_nums)
]), 'val': transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean_nums, std_nums)
]),
}
# Set the directory for the data
data_dir = '/content/drive/MyDrive/Data/'
# Use the image folder function to create datasets
chosen_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x),
chosen_transforms[x])
for x in ['train', 'val']}
# Make iterables with the dataloaders
dataloaders = {x: torch.utils.data.DataLoader(chosen_datasets[x], batch_size=4,
shuffle=True, num_workers=8)
for x in ['train', 'val']}
dataset_sizes = {x: len(chosen_datasets[x]) for x in ['train', 'val']}
class_names = chosen_datasets['train'].classes
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
dataset_sizes
# class_names
# device
mean_nums
def imshow(inp, title=None):
inp = inp.numpy().transpose((1, 2, 0))
mean = np.array([mean_nums])
std = np.array([std_nums])
inp = std * inp + mean
inp = np.clip(inp, 0, 1)
plt.imshow(inp)
if title is not None:
plt.title(title)
plt.pause(0.001) # Pause a bit so that plots are updated
# Grab some of the training data to visualize
inputs, classes = next(iter(dataloaders['train']))
我得到了这个错误:
Caught RuntimeError in DataLoader worker process 0.
Original Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/worker.py", line 198, in _worker_loop
data = fetcher.fetch(index)
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/fetch.py", line 47, in fetch
return self.collate_fn(data)
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/collate.py", line 83, in default_collate
return [default_collate(samples) for samples in transposed]
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/collate.py", line 83, in <listcomp>
return [default_collate(samples) for samples in transposed]
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/collate.py", line 55, in default_collate
return torch.stack(batch, 0, out=out)
RuntimeError: stack expects each tensor to be equal size, but got [3, 65, 36] at entry 0 and [3, 61, 39] at entry
最后一行发生错误,并在控制台上显示此错误! 我在网上搜索,但什么都没有
【问题讨论】:
标签: python pytorch classification