pytorch 加载自制图像数据集并划分训练集和测试集:

一、pytorch 加载自制图像数据集并划分训练集和测试集步骤: 

1、对数据集进行文件夹组织处理以适应ImageFolder的要求,其格式为: 
        datasrc/dog/xxx.png 
        datasrc/dog/xxy.png 
        datasrc/dog/xzz.png 

        datasrc/cat/xxx.png 
        datasrc/cat/xxy.png 
        datasrc/cat/xzz.png 

2、然后将ImageFolder的返回结果作为DataLoader的输入,完成训练集数据和测试集数据的迭代。         torchvision.datasets.ImageFolder()读取图像
       

3、 random_split实现数据集的划分, 
        train, test = torch.utils.data.random_split(full_dataset, [train_lengths, test_lengths]) 
        train_lengths, test_lengths是一个list,按照对应的数量返回数据个数。数据量总和等于all_dataset中的数据个数,不是按比例划分的。 

4 使用DataLoader完成训练集数据和测试集数据的读取迭代。 
  torch.utils.data.DataLoader()加载数据集 

二、代码实例

# 工具类
import torch
import torchvision
from torch.utils.data import DataLoader, random_split
from torch.utils.tensorboard import SummaryWriter


data_path = 'E:/AI_Project/pytorch_B_zhan/garbage-classification-master/dataset-resized/'

full_data = torchvision.datasets.ImageFolder(root=data_path,transform=torchvision.transforms.ToTensor()) #读取图像,将numpy的ndarray或PIL.Image读的图片转换成形状为(C,H, W)的Tensor格式,且/255归一化到[0,1.0]之间
train_size = int(len(full_data)*0.8)  #这里train_size是一个长度矢量,并非是比例,我们将训练和测试进行8/2划分
test_size = len(full_data) - train_size


train_dataset, test_dataset =random_split(full_data, [train_size, test_size])

train_loader = DataLoader(train_dataset, batch_size=1, num_workers=0, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=1, num_workers=0, shuffle=False)
'''
SummaryWriter查看数据集的划分
1、writer = SummaryWriter("logs")将log存在文件夹logs下。
 
'''
writer = SummaryWriter("logs")


for epoch in range(3):# 查看前3个epoch图像
    step = 0
    for data in train_loader:
        imgs, targets = data #读取图像和标签
        print(imgs.shape)
        print(targets)
        writer.add_images("Epoch: {}".format(epoch), imgs, step)
        writer.add_scalar("Epoch: {}".format(epoch), targets, step)
        step = step + 1

writer.close()

三、效果图

  • 12
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用 PyTorch 读取无标签数据集并保存按比例划分训练集测试集的示例代码: ```python import os import random from shutil import copyfile import torch from torch.utils.data import Dataset class UnlabeledDataset(Dataset): def __init__(self, data_dir): self.data_dir = data_dir self.image_list = os.listdir(data_dir) def __len__(self): return len(self.image_list) def __getitem__(self, idx): image_path = os.path.join(self.data_dir, self.image_list[idx]) image = Image.open(image_path).convert('RGB') return image def split_dataset(data_dir, train_ratio=0.8): # Create train and test directories train_dir = os.path.join(data_dir, 'train') test_dir = os.path.join(data_dir, 'test') os.makedirs(train_dir, exist_ok=True) os.makedirs(test_dir, exist_ok=True) # Get list of images image_list = os.listdir(data_dir) # Shuffle images random.shuffle(image_list) # Split dataset train_size = int(train_ratio * len(image_list)) train_images = image_list[:train_size] test_images = image_list[train_size:] # Copy images to train directory for image_name in train_images: src_path = os.path.join(data_dir, image_name) dst_path = os.path.join(train_dir, image_name) copyfile(src_path, dst_path) # Copy images to test directory for image_name in test_images: src_path = os.path.join(data_dir, image_name) dst_path = os.path.join(test_dir, image_name) copyfile(src_path, dst_path) ``` 在上面的代码中,`UnlabeledDataset` 类是一个 PyTorch 数据集,它从无标签数据集目录中读取图像。`split_dataset` 函数将无标签数据集按比例划分训练集测试集,并将它们保存到相应的目录中。默认使用 0.8 的比例将数据集训练集测试集。 使用示例: ```python data_dir = '/path/to/unlabeled/dataset' split_dataset(data_dir) # Load train and test datasets train_dataset = UnlabeledDataset(os.path.join(data_dir, 'train')) test_dataset = UnlabeledDataset(os.path.join(data_dir, 'test')) # Create data loaders train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=32, shuffle=True) test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=32) ``` 上面的示例代码将无标签数据集按比例划分训练集测试集,并创建了相应的 PyTorch 数据加载器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值