栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Pytroch机器学习——pytroch加载数据

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Pytroch机器学习——pytroch加载数据

Dataset & Dataloader 两个类的不同的作用和联系

Dataset类介绍

首先,通过官方文档了解一下:
DataSet类是一个抽象类,所有的数据集都必须继承Dataset类,然后重写__getitem__方法(这个方法主要是获得每个数据对应的label),也可以选择重写__len__方法(返回值是数据集的长度)

Dataset类实战 小tips

在调试的时候,推荐大家多使用console,比如我打开了一张图片,在右边就会显示这个图片的所有属性,非常方便,当不知道一个对象有什么属性的时候,也可以这样看看

os类的几个常用方法

os.listdir(dir) 将指定的dir目录下的文件变成一个列表
example

dir_path = "D:mypytorchlearn_pytorch\hymenoptera_data\train\ants"
 img_path_list = os.listdir(dir_path)


os.path.join(root_idr,label.dir)将给定的两个地址拼接成一个
example

 import os
 root_idr = "D:mypytorchlearn_pytorch\hymenoptera_data\train"
 label_dir = "ants"
 path = os.path.join(root_idr,label_dir)
Dataset实战

我们重写了__getitem__方法,如果想要通过idx来获取图片,那就要将数据集变成一个列表
因为在一个目录下往往不止一个数据集,所以初始化的时候,我们将根目录和数据集目录分别命名再拼接,这样我们写的数据集方法就能通用

from torch.utils.data import Dataset
from PIL import Image
import os

class MyData(Dataset):
    def __init__(self, root_dir, label_dir):
        self.root_dir = root_dir
        self.label_dir = label_dir
        self.path = os.path.join(self.root_dir, self.label_dir)
        self.img_path = os.listdir(self.path)

    def __getitem__(self, idx):
        img_name = self.img_path[idx]
        img_item_path = os.path.join(self.root_dir, self.label_dir, img_name)
        img = Image.open(img_item_path)
        label = self.label_dir
        return img, label

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

在控制台调试,可以看到,我们创建了两个数据集,ants_dataset和bees_dataset,在右边可以看到数据集的属性,也就是MyData类定义的属性

因为getitem方法返回两个参数,所以用下标访问数据集里的某个数据时有两个参数

合并两个数据集

train_dataset = ants_dataset + bees_dataset


123就是蚂蚁数据集的最后一张图片,124就是蜜蜂数据集的第一张图片,所以合并就是将后面的数据集的编号(原本从0开始),从前面数据集的长度开始

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947798.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号