pytorch导入数据集

1、概念:

Dataset:一种数据结构,存储数据及其标签

Dataloader:一种工具,可以将Dataset里的数据分批、打乱、批量加载并进行迭代等

(方便模型训练和验证)

Dataset就像一个大书架,存放着带有标签的数据书籍,并且这些书有编号(0,1,2...);

而Dataloader就像一个图书管理员,负责从书架上按需取出书籍并分批提供给读者。

2、Dataset的组织形式

train:训练集 val:验证集

一种方式是label作为数据文件夹的名字,

另一种方式是label和数据本身分开成两个文件夹(label文件夹里装的是和每个数据对应的.txt)

3、处理图像:PIL(Python Imaging Library).Image

|--------------------------------------|--------------------------------------|
| pip install Pillow | 安装PIL |
| from PIL import Image | 引入Image类(代表图像对象, 可以通过创建Image实例来操作图像) |
| img=Image.open('图像路径') 打开图像 | img.show() 显示图像 |
| print(img.size) 输出(宽度,高度) | print(img.format) 输出图像格式(JPEG、PNG等) |
| resized_img=img.resize((宽度,高度)) 调整大小 | |
| resized_img=img.save('新路径') 保存为新文件 | |

4、处理目录和文件:os

|---------------------------------------------|--------------------------------------|
| import os | |
| cur_dir=os.getcwd() | 获取当前工作目录 |
| files=os.listdir(cur_dir) | 列举当前目录下的所有子目录(文件和文件夹) |
| os.makedirs('new_folder') | 创建新文件夹(如果不存在) |
| os.remove('file.txt') | 删除文件(os.rmdir('empty_folder')删除空文件夹) |
| os.path.exists('some_path') | 检查路径是否存在 |
| file_path=os.path.join('folder','file.txt') | 拼接路径 |
| abs_path=os.path.abspath('file.txt) | 获取文件的绝对路径 |

5、代码

python 复制代码
from torch.utils.data import Dataset #从torch的常用工具箱utils中拿data工具,然后引入Dataset类
from PIL import Image #处理图片要用到
import os #访问目录、获取图片的地址要用到

class MyData(Dataset): #让MyData类继承Dataset类
    def __init__(self,root_dir,label_dir): #数据集的初始化:要用到根目录和标签目录(这里把label作为数据文件夹的名字了)
        self.root_dir=root_dir
        self.label_dir=label_dir
        self.path=os.path.join(self.root_dir,self.label_dir) #根目录+标签目录=数据集的路径
        self.img_dir_list=os.listdir(self.path) #列举数据集目录下的每个数据(文件)

    def __getitem__(self,idx): #获取索引对应的数据
        img_dir=self.img_dir_list[idx] #得到索引对应的数据文件
        img_path=os.path.join(self.root_dir,self.label_dir,img_dir) #数据集路径+数据文件=数据文件路径
        img=Image.open(img_path)
        label=self.label_dir
        return img,label

    def __len__(self):
        return len(self.img_dir_list) #数据长度=数据集目录下的子文件数量

root_dir=r"dataset/hymenoptera_data/train"
ants_label_dir="ants"
ants_dataset=MyData(root_dir,ants_label_dir)
bees_label_dir="bees"
bees_dataset=MyData(root_dir,bees_label_dir)

train_dataset=ants_dataset+bees_dataset
相关推荐
编码浪子5 分钟前
Transformer的编码机制
人工智能·深度学习·transformer
深蓝海拓18 分钟前
Pyside6(PyQT5)中的QTableView与QSqlQueryModel、QSqlTableModel的联合使用
数据库·python·qt·pyqt
IE0618 分钟前
深度学习系列76:流式tts的一个简单实现
人工智能·深度学习
GIS数据转换器23 分钟前
城市生命线安全保障:技术应用与策略创新
大数据·人工智能·安全·3d·智慧城市
无须logic ᭄26 分钟前
CrypTen项目实践
python·机器学习·密码学·同态加密
Channing Lewis39 分钟前
flask常见问答题
后端·python·flask
Channing Lewis40 分钟前
如何保护 Flask API 的安全性?
后端·python·flask
水兵没月2 小时前
钉钉群机器人设置——python版本
python·机器人·钉钉
一水鉴天2 小时前
为AI聊天工具添加一个知识系统 之65 详细设计 之6 变形机器人及伺服跟随
人工智能
我想学LINUX3 小时前
【2024年华为OD机试】 (A卷,100分)- 微服务的集成测试(JavaScript&Java & Python&C/C++)
java·c语言·javascript·python·华为od·微服务·集成测试