PyTorch Dataset与DataLoader使用超详细讲解
作者:竹清兰香 发布时间:2021-05-12 16:43:43
一、Dataset
Dataset 类提供一种方式去获取数据及其标签
主要有两个目的:
获取每一个数据及其标签
获取数据的总量大小
1. 在控制台进行操作
Hymenoptera (膜翅目昆虫)数据集下载地址:
链接: https://pan.baidu.com/s/1XKwXsAtE2yzZW2IsvBDpnw?pwd=8a5t
提取码: 8a5t
这是一个蚂蚁蜜蜂二分类的数据集,通常数据集有以下三种组织形式(上面的数据集属于第一种):
不同的类别以文件夹的形式存在,文件夹中是该类别的图片
图片与标签分别存储,图片在一个文件夹下,
label
信息在另一个文件夹下label
直接写在图片名称里
①获取图片的基本信息
在Pycharm 中,点击下方的PythonConsole进入控制台进行操作(通过控制台可以看到变量的详细信息)
首先加载图片,逐行输入下方代码:
from PIL import Image
img_path = "./dataset/hymenoptera_data/train/ants/0013035.jpg"
img = Image.open(img_path)
此时我们就可以在右侧看到相关变量的信息:
点击img
变量,可以查看图片的详细信息。通过控制台执行程序能够直观地获取后续操作所需的数据:
最后可以通过img.show()
打开图片查看:
②获取文件的基本信息
同样还是在控制台逐行输入以下代码:
dir_path = "dataset/hymenoptera_data/train/ants"
import os
img_path_list = os.listdir(dir_path)
img_path_list[0]
我们就可以获取到文件夹下的文件名称,由于是使用控制台,我们还可以在右侧查看列表的详细信息:
因此在控制台操作是有很大的优点的,我们可以在控制台逐行执行已经编写好的文件中的语句,通过查看右侧变量的值来判断程序写的是否有问题
2. 编写一个继承Dataset 的类加载数据
下面的代码也可以在控制台运行(可以多行复制粘贴)来检验程序是否有误
①定义 MyData类
导入所需头文件:
from torch.utils.data import Dataset
from PIL import Image
import os
定义MyData
类:
__init__
:初始化函数__getitem__
:返回指定下标的图片和标签__len__
:返回数据集的大小
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)
其中os.path.join()
可以实现多个路径的合并且不出错
②创建类的实例并调用
创建 MyData
类的实例:
if __name__ == "__main__":
root_dir = "../dataset/hymenoptera_data/train"
ants_label_dir = "ants"
bees_label_dir = "bees"
ants_dataset = MyData(root_dir, ants_label_dir)
bees_dataset = MyData(root_dir, bees_label_dir)
调用类中写好的函数:
img, label = ants_dataset.__getitem__(3)
print(ants_dataset.__len__(), label)
img.show()
同时我们也可以通过下面这种方式用已有的数据集来创造数据集:
train_dataset = ants_dataset + bees_dataset
二、DataLoader
DataLoader 类是为后面的网络提供不同的数据形式
DataLoader 会根据
batch_size
的值对数据进行打包导入所需的包
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
加载数据:
test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor())
test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=True)
测试:
img, target = test_data[0]
print(img.shape)
print(target)
进行日志记录,开始训练:
writer = SummaryWriter("dataloader")
for epoch in range(2):
step = 0
for data in test_loader:
imgs, targets = data
print(imgs.shape)
print(targets)
writer.add_images("Epoch: {}".format(epoch), imgs, step)
step = step + 1
writer.close()
来源:https://blog.csdn.net/weixin_53312629/article/details/126616169


猜你喜欢
- 本文实例讲述了Python3.6基于正则实现的计算器。分享给大家供大家参考,具体如下:# -*- coding:utf-8 -*-#!pyt
- K-Means聚类算法演示及可视化展示#导入包from sklearn.cluster import KMeansX = [[0.0888,
- 对于vue.js中的this.emit的理解:this.emit(‘increment1',”这个位子是可以加参数的”);其实它的作
- 本文实例讲述了python实现的简单FTP上传下载文件的方法。分享给大家供大家参考。具体如下:python本身自带一个FTP模块,可以实现上
- 前言最近想做个小玩意,需要在mac端实现屏幕截图,搜了下网上中文资源都比较老旧,于是查了下,发现有些好用的Python库已经支持Mac 以及
- 描述:下午快下班的时候公司供应链部门的同事跑过来问我能不能以程序的方法帮他解决一些excel表格每周都需要手工重复做的事情,Excel 是数
- 1 简介今天我要给大家介绍的这个Python库prettymaps非常的有趣,基于它,我们只需要简单的代码就可以对地球上给定坐标和范围的任意
- 一、DAFONT 英文字体很多,分类很详细,字体多数都是免费,唯一的缺点中文字体少了些.http://www.dafont.co
- 不知道在坛子里有多少朋友使用触发器,如果你已经对触发器很了解了,那么请跳过此文,如果你还没有使用过触发器的话,那就让我们来认识一下吧。相关阅
- 在学习asyncio之前,先理清楚同步/异步的概念:同步是指完成事务的逻辑,先执行第一个事务,如果阻塞了,会一直等待,直到这个事务完成,再执
- python之所以被广泛使用,倒不见得是本身语法简单,而是而nodejs/javascript一样把三方库的依赖管理简化了,而不用和java
- 每次使用python获取查询结果的时候,都会纠结一段时间到底用fetchone和fetchall,用不好容易报错,关键在于没有搞清楚它们之间
- 本文实例讲述了python求解水仙花数的方法。分享给大家供大家参考。具体如下:一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于
- 最近使用pymysql写脚本的情况越来越多了,刚好整理,简单封装一个pymysql的操作类import pymysqlclass Mysql
- 题目要求1.后台管理员只有一个用户:admin, 密码: admin2.当管理员登陆成功后,可以管理前台会员信息。3.会员信息管
- 本文实例讲述了Python元组 tuple的概念与基本操作。分享给大家供大家参考,具体如下:元组 tuple元组 tuple的定义元组的创建
- xlwt与xlrd只能针对xls格式的excel进行操作,如果想对xlsx格式进行操作请使用openpyxl模板对excel进行操作xlwt
- 先说点什么mybatis-plus是一款增强版的mybatis,功能强大,可以很大程度的简化开发。然而达梦数据库比较小众,虽然官方说myba
- 第一步:使用记事本打开mysql安装目录下的"my.ini”文件。# MySQL client library initializ
- 基础Redis 库C# 下 Redis-Client 开源的库很多,有 BeetleX.Redis、csredis、Nhiredis、red