【PyTorch】关于torchvision中的数据集以及dataloader的使用

11 篇文章 0 订阅
6 篇文章 0 订阅

前提文章目录

【PyTorch】深度学习PyTorch环境配置及安装【详细清晰】
【PyTorch】深度学习PyTorch加载数据
【PyTorch】关于Tensorboard的简单使用
【PyTorch】关于Transforms的简单使用


数据集简介

pytorch官网:https://pytorch.org/
cifar数据集网址:https://pytorch.org/vision/0.9/datasets.html#cifar
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

程序中下载数据集

在这里插入图片描述

使用CIFAR10数据集 按ctrl+p可以提示括号内需要输入什么参数
root:希望数据集存放在什么位置;
train 默认为true,为true表示该数据集为训练集 为false表示该数据集为测试集;
download: 为true就是让它进行一个下载

import torchvision
# 训练数据集
train_set = torchvision.datasets.CIFAR10(root="./dataset", train=True, download=True)
# 测试数据集
test_set = torchvision.datasets.CIFAR10(root="./dataset", train=False, download=True)

运行程序,可以看到如下图,说明已经开始下载了
在这里插入图片描述
下载速度慢的解决办法:
直接点击蓝色的下载链接进行下载或者将蓝色的下载链接放在迅雷里面进行下载
coco数据集大概30多个G,这个CIFAR数据集才一百多兆,比较时候练手
在这里插入图片描述
下载完毕!
在这里插入图片描述

读取数据集

import torchvision

# 训练数据集
train_set = torchvision.datasets.CIFAR10(root="./dataset", train=True, download=True)
# 测试数据集
test_set = torchvision.datasets.CIFAR10(root="./dataset", train=False, download=True)

# 查看数据集
print(test_set[0])  # (<PIL.Image.Image image mode=RGB size=32x32 at 0x27E68307FA0>, 3)  # 图片组成部分 第一个是图片 第二个是target
print(test_set.classes)  # ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']

img, target = test_set[0]
print(img)  # <PIL.Image.Image image mode=RGB size=32x32 at 0x27E21B660E0>
print(target)  # 3   实际上对应的就是test_set.classes的第4个也就是cat,因为它是从0开始算的,说明这张图片对应的是猫
print(test_set.classes[target])  # cat
# 展示图片  PIL的Image可以直接show
img.show()

数据集的图片比较小,只有32x32的像素
展示图片结果:
在这里插入图片描述

结合transform进行读取数据集

import torchvision

# PIL图片类型需要转为tensor类型
from torch.utils.tensorboard import SummaryWriter

dataset_transform = torchvision.transforms.Compose([
    torchvision.transforms.ToTensor()
])
# 训练数据集
train_set = torchvision.datasets.CIFAR10(root="./dataset", train=True, transform=dataset_transform, download=True)
# 测试数据集
test_set = torchvision.datasets.CIFAR10(root="./dataset", train=False, transform=dataset_transform, download=True)

# # 查看数据集
# print(test_set[0])  # (<PIL.Image.Image image mode=RGB size=32x32 at 0x27E68307FA0>, 3)  # 图片组成部分 第一个是图片 第二个是target
# print(test_set.classes)  # ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
#
# img, target = test_set[0]
# print(img)  # <PIL.Image.Image image mode=RGB size=32x32 at 0x27E21B660E0>
# print(target)  # 3   实际上对应的就是test_set.classes的第4个也就是cat,因为它是从0开始算的,说明这张图片对应的是猫
# print(test_set.classes[target])  # cat
# # 展示图片
# img.show()

# print(test_set[0])  # tensor类型的  表明可以用tensorboard进行显示
writer = SummaryWriter("p10")
for i in range(10):
    img, target = test_set[i]
    writer.add_image("test_set", img, i)
writer.close()

运行程序后,打开终端,用tensorboard进行读取
在这里插入图片描述
在这里插入图片描述

dataloader

在这里插入图片描述
dataset:是一堆数据集,不知道里面每一张数据的内容
dataloader:将数据集加载到神经网络当中,做的是每次去dataset去取数据,每次取多少,怎么取,是由dataloader当中的参数设置的
dataloader官网:https://pytorch.org/docs/1.8.1/data.html?highlight=dataloader#torch.utils.data.DataLoader
在这里插入图片描述

常见参数设置

  • batch_size:每次取数据取的数量
  • shuffle:打乱数据,为true打乱顺序和原来不一样,false打乱顺序和原来一样
  • num_workers:多进程进行加载 默认为0,表示用主进程进行加载 ,有时候在Windows会有一些问题,num_workers>0,有时候在Windows下会出现一些错误
  • drop_last:对于取整数据集剩余除不尽的数据集的个数是采用舍去还是不舍去,为true舍去,false不舍去

示例测试:

batch_size的参数测试

import torchvision.datasets

from torch.utils.data import DataLoader

# 准备测试数据集
from torch.utils.tensorboard import SummaryWriter

test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor())
# batch_size=4每次从数据集中取4张进行打包
test_loader = DataLoader(dataset=test_data, batch_size=4, shuffle=True, num_workers=0, drop_last=False)

# 测试数据集中第一张图片及target
img, target = test_data[0]
print(img.shape)  # torch.Size([3, 32, 32])
print(target)  # 3

writer = SummaryWriter("dataloader")
step = 0
for data in test_loader:
    imgs, targets = data
    # print(imgs.shape)  # torch.Size([4, 3, 32, 32]) 4张图片 3通道 32x32的图片
    # print(targets)  # tensor([9, 6, 5, 7])  ; 9, 6, 5, 7这些数字是随机抓取的target
    writer.add_images("test_data", imgs, step) #注意这里是add_images有一个s的
    step += 1
writer.close()

在这里插入图片描述
在这里插入图片描述

drop_last的参数测试

修改代码

test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=True)
writer.add_images("test_data_drop_last", imgs, step)

在这里插入图片描述

shuffle的参数测试

shuffle为False测试:第一次取的顺序和第二次取的顺序不打乱,是取得顺序是一样的

test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=False, num_workers=0, drop_last=True)
for epoch in range(2): # epoch 取值0、1    shuffle=False两轮摸一样的。不打乱
    step = 0
    for data in test_loader:
        imgs, targets = data
        writer.add_images("Epoch:{}".format(epoch), imgs, step)
        step += 1

在这里插入图片描述
shuffle为True测试:第一次取的顺序和第二次取的顺序会进行一个打乱

test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=True)

在这里插入图片描述
全部代码:

import torchvision.datasets

from torch.utils.data import DataLoader

# 准备测试数据集
from torch.utils.tensorboard import SummaryWriter

test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor())
# batch_size=4每次从数据集中取4张进行打包
#test_loader = DataLoader(dataset=test_data, batch_size=4, shuffle=True, num_workers=0, drop_last=False)
# test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=True)
# test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=False, num_workers=0, drop_last=True)
test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=True)

# 测试数据集中第一张图片及target
img, target = test_data[0]
print(img.shape)  # torch.Size([3, 32, 32])
print(target)  # 3

writer = SummaryWriter("dataloader")
for epoch in range(2): # epoch 取值0、1    shuffle=False两轮摸一样的。不打乱
    step = 0
    for data in test_loader:
        imgs, targets = data
        # print(imgs.shape)  # torch.Size([4, 3, 32, 32]) 4张图片 3通道 32x32的图片
        # print(targets)  # tensor([9, 6, 5, 7])  ; 9, 6, 5, 7这些数字是随机抓取的target
        # writer.add_images("test_data", imgs, step)
        # writer.add_images("test_data_drop_last", imgs, step)
        writer.add_images("Epoch:{}".format(epoch), imgs, step)
        step += 1
writer.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@¥文竹¥

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值