pytorch实现自己制作训练集和测试集

pytorch可用于图像识别,但我们现在绝大部分用的是MINIST和cifar10图片,想要用自己的训练和测试图像路径,需要制作读取训练集和测试集的代码。本文讲述pytorch实现读取训练集和测试集通用代码。

首先讲一下读取图片路径的框架:
torch.utils.data.Dataset是一个pytorch用来表示数据集的抽象类,我们用这个类来处理自己的数据集时必须继承Dataset,然后重写下面的函数:
len:使得len(dataset)返回数据集的大小
getitem:使得支持dataset[i]能够返回第i个数据样本的下标操作。

接下来给出具体的代码片段,需要调整的是img_id = int(img_path[-12:-9]),这段是读文件名,需要根据自己的文件名来设定img_path里的数值。该文件命名为Path.py

import glob
import torch
from torch.utils.data import Dataset
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

class path(Dataset):

    def __init__(self, root_path):
        self.mDataX = []
        self.mDataY = []

        for img_path in glob.glob(root_path + r'\*'):
            img = Image.open(img_path)
            img = img.convert('L')  # 转换成灰度图
            # new_size = np.array(img.size) / 4
            # new_size = new_size.astype(int)
            # img = img.resize(new_size, Image.BILINEAR)  # 从(宽,高)(640, 480)缩小为(160, 120)
            img_data = np.array(img, dtype=float)
            img_data = img_data.reshape(-1)
            self.mDataX.append(img_data)
            img_id = int(img_path[-12:-9])  ##文件名的后多少位,以后用这里需要根据图像名称更改
            self.mDataY.append(img_id)

        self.mDataX = torch.tensor(self.mDataX)
        self.mDataY = torch.tensor(self.mDataY)

    def __getitem__(self, data_index):
        input_tensor = torch.tensor(self.mDataX[data_index])
        output_tensor = torch.tensor(self.mDataY[data_index])
        return input_tensor, output_tensor

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

接下来是调用上面写好的.py文件

import torch
from Path import *

train_set = Path(r'C:\datasets\人脸图像\训练样例')
train_loader = torch.utils.data.DataLoader(train_set, batch_size=1, shuffle=False)  # , num_workers=8
print('OK! ', len(train_set), len(train_loader))

test_set = Path(r'C:\datasets\人脸图像\测试样例')
test_loader = torch.utils.data.DataLoader(test_set, batch_size=1, shuffle=False)  # , num_workers=8
print('OK! ', len(test_set), len(test_loader))

接下来可以使用你自己的训练集和测试集图像了!!!

对于图像多分类任务,我们需要准备好训练集测试集,并且需要把图像转换PyTorch中的`Tensor`格式。以下是一个简单的例子: ```python import os import torch import torchvision.transforms as transforms from torchvision.datasets import ImageFolder from torch.utils.data import DataLoader # 定义数据转换 transform = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 加载训练集 train_dataset = ImageFolder(root='./train', transform=transform) train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True) # 加载测试集 test_dataset = ImageFolder(root='./test', transform=transform) test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False) ``` 假设我们的训练集测试集分别保存在`./train``./test`文件夹中,每个文件夹下都有多个子文件夹,每个子文件夹包含一种类别的图片。`ImageFolder`类会自动把图片按照类别进行分类,并且把图片转换`Tensor`格式。 在上面的代码中,我们使用了`transforms`模块来定义数据转换的操作,包括将图片重新调整大小为256x256、居中裁剪为224x224、将像素值归一化到0到1之间、使用均值标准差进行标准化处理等操作。这些操作可以提高模型的训练效果。 最后我们使用`DataLoader`类来加载数据集。`DataLoader`类可以帮助我们自动批量加载数据,并且可以进行数据打乱多线程加载等操作。在训练过程中,我们可以使用`train_loader`来加载训练集数据,使用`test_loader`来加载测试集数据。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值