PyTorch的torchvision内置数据集使用,transform+pytorch联合使用

一、PyTorch的torchvision内置数据集介绍

我们前面的文章里谈到的数据集是我们自己找的一些自定义数据集。那么在Pytorch中存在2种数据集(Dataset),即内置数据集(Built-in dataset)和自定义数据集(Custom dataset)。该2种数据集在使用时有所区别,我们之前课程里学习的就是自定义数据集,这里就不多讲了。

而pytorch的内置数据集(Built-in dataset)是由pytorch的torchvision这个库提供的,我们可以直接在代码中下载下来使用,包含了各种各样的机器训练所需要的数据集类型

1、首先去官网了解一下

官方文档在这:torchvision — Torchvision 0.19 documentation

这是最新的pytorch官方文档,可能每一年都会变,目前2024年最新版的就是这样

往下滑,找到这里【Dataset】的【Built-in dataset】,这个就是内置数据集的官方文档

然后就能看到各种各样的数据集,看不懂可以下载一下网页翻译的插件,或者用微信的截图,可以实时翻译任何界面的英文

然后大概整体介绍一下我们常用的一些数据集:

  • MNIST:手写数字图像数据集,用于图像分类任务。
  • CIFAR:包含10个类别、60000张32x32的彩色图像数据集,用于图像分类任务。
  • COCO:通用物体检测、分割、关键点检测数据集,包含超过330k个图像和2.5M个目标实例的大规模数据集。
  • ImageNet:包含超过1400万张图像,用于图像分类和物体检测等任务。
  • Penn-Fudan Database for Pedestrian Detection and Segmentation:用于行人检测和分割任务的数据集。
  • STL-10:包含100k张96x96的彩色图像数据集,用于图像分类任务。
  • Cityscapes:包含5000张精细注释的城市街道场景图像,用于语义分割任务。
  • SQUAD:用于机器阅读理解任务的数据集。

其他的比较复杂以后再说,目前就这些可以了解一下,比如点进去CIFAR10可以看到,是一个对图片物品的识别

点击MNIST,这是来自各个人的手写文字的图片数据集

2、了解数据集的三大分类:训练集、验证集、测试集

数据集具体分为三大类:训练集、验证集、测试集

我们可以用以前读书时的上课知识、课后练习题、期末考试来比喻这三类数据集:

假设我们有已知的T1、T2、T3三个点,对应的 “坐标” 是数据集里【带有标签的样本对】:(x1, y1)、(x2, y2)、(x3, y3),x代表输入、y代表标签

这两个坐标会分别得到两个点T1、T2数据,当我们用这两个数据进行机器训练时就会得到一个函数式(假设):y = ax + b,那么这个【y = ax + b】就是【模型

然后我们当我们把T3的【x3】输入,根据【模型】:【y = ax + b】得出 \hat{y}这个 \hat{y}是机器模型训练得到的结果,而我们已知的T3坐标是【x3,y3】(就比如说 [0013035.jpg] 这个图片对应的是 [蚂蚁] 这个标签)

那么现在将\hat{y}】与【y3】进行对比,就可以得出这个模型的好坏。

然后我们刚刚知道,(x1, y1)、(x2, y2)参与了模型训练,因此就是【训练集】;而(x3, y3)没有参与训练,只是在最后对(x1, y1)、(x2, y2)训练出来的模型进行测试,他就是【测试集】

【训练集】【测试集】有严格划分,训练集只参与训练,相当于我们做的课后练习、模拟试卷,而测试集只参与测试,相当于高考试卷,你总不能把高考题直接给学生做了再参加高考吧?

那么【验证集】又是什么?

我们前面的例子里,训练机器模型的时候,我们根据T1、T2获得了【y=ax+b】这么个模型式子,那么a、b就是【参数】

在实际机器训练中,我们还需要一种参数叫【超参数】,它考虑得是更加精细的方面的可能,通过调整这些超参数,才能让模型更加精确、误差更小

但是随着业务越来越复杂,需要调整的超参数越来越多、越来越难,人为调整已经不太适用

那么就产生了【验证集】,借助它可以获得【最优超参数组合】

【训练集】产生模型,【验证集】评估模型并找出一组最有超参数,然后再交给【训练集】产出新的模型......如此反复,最终将最优化的模型交给【测试集】测试

3、pytorch下载并使用数据集

回到代码 ,现在我们先用【CIFAR-10】这个数据集为例子讲解,点开官方文档,这次点左边不要点右边

然后可以看到,【CIFAR-10】这个数据集需要传入这么几个参数,具体作用我写在图片了

执行一下代码进行下载:

import torchvision

# 这里我们设置train_set是训练集数据、test_set是测试集数据
# 然后因为我根目录已经有一个"dataset"目录放自定义数据集了,我就指定在根目录再创一个文件夹叫“dataset2”,用来放下载的内置数据集
# 然后【训练集】的train参数设置为true,【测试集】就是false,最后允许下载
train_set = torchvision.datasets.CIFAR10("./dataset2", train=True, download=True)
test_set = torchvision.datasets.CIFAR10("./dataset2", train=False, download=True)

(网速因人而异吧,我这个巨特么慢)

那么有迅雷或者百度网盘的超级会员的可以试一下去迅雷或者百度网盘下载,然后复制粘贴进项目里就行了,没有的话其实也是一样,可以安心下载完挂后台去干别的了,至少一小时起步

感谢,来自该博主文章:CIFAR-10 / CIFAR-100数据集(官网/网盘下载)_cifar100pytorch下载-CSDN博客

链接:百度网盘 请输入提取码
提取码:uwis

N万年之后......终于下载安装完毕,那么而我们在下载的代码下面输出一下数据集看看就会发现成功了,这里注意,即使我们下载完了数据集,这两句代码还是要留着,download参数也不用换成False,因为它会自动检测已经下载存在,就不会重复下载了

import torchvision

# 这里我们设置train_set是训练集数据、test_set是测试集数据
# 然后因为我根目录已经有一个"dataset"目录放自定义数据集了,我就指定在根目录再创一个文件夹叫“dataset2”,用来放下载的内置数据集
# 然后【训练集】的train参数设置为true,【测试集】就是false,最后允许下载
train_set = torchvision.datasets.CIFAR10("./dataset2", train=True, download=True)
test_set = torchvision.datasets.CIFAR10("./dataset2", train=False, download=True)

# 打印训练集和测试集的数据量
print(train_set[0])

然后在PyTorch的内置数据集中,无论是CIFAR-10、MNIST还是其他数据集,当你索引数据集对象时,都会返回一个元组,其中第一个元素是【数据】,第二个元素是【标签的索引】。

那么我们知道python可以多个变量同时接收多个返回值,那么就可以设两个变量来接收【数据】和【标签的索引】,变量名随便起,比如:

那么我们将代码放到【python控制台】运行的话,就会看到数据集有这么个属性:【classes】,这个属性是列表list,而我们刚刚获取到的【标签的索引】就是对应【classes】列表里的索引,那么【数据集.classes[ 标签的索引 ]】就可以获取到【标签】了

4、结合transforms,把数据集转化成transforms的tensor型数据

transform有个函数叫【Compose】,它可以将多个操作组合起来,相当于打包,然后形成一个操作流程,一次性依次对图像进行所有操作

例如,假设你有一个图像,你想要先将其转换为灰度图像,然后再将其大小调整为32x32。你可以使用【torchvision.transforms.Compose】来组合这两个转换操作:

from torchvision import transforms

# 创建两个转换操作
to_grayscale = transforms.Grayscale(num_output_channels=1) # 调灰度的操作
resize = transforms.Resize((32, 32)) # 裁剪图像大小的操作

# 组合这两个转换操作,现在就能用它代表这两个操作了
transform = transforms.Compose([to_grayscale, resize])

# 使用组合的转换操作对图像一次性进行两个操作转换
image = transform(image)

那么有了【transform转换操作】之后,翻看上面我们讲过,pytorch的【CIFAR-10】接收的参数里有一个叫【transform=?】,就是用来接收【transform转换操作】的,在两个 “下载代码” 那里的第三个参数位置加上【transform = transform转换操作】

train_set = torchvision.datasets.CIFAR10("./dataset2", train=True, transform=dataset_transfrom, download=True)
test_set = torchvision.datasets.CIFAR10("./dataset2", train=False, transform=dataset_transfrom, download=True)

5、最后结合tensorboard打印一下图像

既然现在图像数据集已经成了tensor类型数据,那就可以用tensorboard打印一下图像了

完整代码:

import torchvision
from torch.utils.tensorboard import SummaryWriter

# torchvision.transforms.Compose是一个函数,它可以将多个图像转换操作组合在一起
dataset_transfrom = torchvision.transforms.Compose([
    torchvision.transforms.ToTensor() # 将图像转换为【tensor(张量)】操作
    # 还可以添加一些裁剪、转灰度......等等图像操作
])

# 这里我们设置train_set是训练集数据、test_set是测试集数据
# 然后因为我根目录已经有一个"dataset"目录放自定义数据集了,我就指定在根目录再创一个文件夹叫“dataset2”,用来放下载的内置数据集
# 然后【训练集】的train参数设置为true,【测试集】就是false,并开启transform数据转换,最后允许下载
train_set = torchvision.datasets.CIFAR10("./dataset2", train=True, transform=dataset_transfrom, download=True)
test_set = torchvision.datasets.CIFAR10("./dataset2", train=False, transform=dataset_transfrom, download=True)

# 输出一些tensor类型的数据集数据
print(train_set[0])

# 最后利用tensorboard打印出照片
write = SummaryWriter("CIFAR-10")
for i in range(10):
    # 遍历10张图片
    img, target = train_set[i]
    write.add_image("【CIFAR-10】_img", img, i)

write.close()

记得关闭上一个tensorboard的终端

### 回答1: PyTorch是一个流行的深度学习框架,它提供了许多工具和功能来处理各种类型的数据集。其中一种常见的数据格式是JSON(JavaScript Object Notation)。 JSON是一种轻量级的数据交换格式,它使用类似于字典的结构来表示数据。在PyTorch中,可以使用内置的json模块来读取和处理JSON数据集。 首先,我们需要使用Python的json库将JSON数据加载到内存中。可以使用`json.load()`函数来读取JSON文件,返回一个包含JSON数据的Python字典。例如,如果我们的JSON文件名为"dataset.json",可以使用以下代码加载数据集: ``` import json with open('dataset.json', 'r') as f: dataset = json.load(f) ``` 然后,我们可以根据数据集的结构使用PyTorch的功能来进一步处理数据。例如,如果我们有一个包含图像路径和标签的JSON数据集,可以使用PyTorch的`torchvision`模块来加载图像和标签,并进行预处理和转换: ``` from torchvision import transforms from PIL import Image transform = transforms.Compose([ transforms.Resize((256, 256)), transforms.ToTensor(), ]) for data in dataset: image_path = data['image_path'] label = data['label'] image = Image.open(image_path) image = transform(image) # 进一步处理图像和标签 ``` 最后,我们可以使用PyTorch的DataLoader来创建一个可迭代的数据加载器,并在训练模型时使用该数据加载器。这个数据加载器可以提供按批次加载数据、数据随机排序等功能,从而方便地处理大规模的JSON数据集。 总而言之,PyTorch提供了丰富的功能来处理JSON数据集。我们可以使用json库加载和解析JSON数据,并使用PyTorch的功能来进一步处理和转换数据,以进行深度学习模型的训练和评估。 ### 回答2: PyTorch是一种流行的深度学习框架,它提供了各种各样的功能和工具来帮助我们构建和训练机器学习模型。而JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于在不同操作系统和编程语言之间传输和存储数据。在PyTorch中,我们可以使用JSON数据集来加载和预处理我们的训练和测试数据。 PyTorch提供了一个名为torchvision的库,其中包含了一些内置数据集,例如MNIST、CIFAR-10等。然而,如果我们想使用自定义的JSON数据集,我们需要首先将数据转换为PyTorch所需的格式。 为了加载JSON数据集,我们可以使用PyTorch的Dataset类和DataLoader类。Dataset类是一个抽象类,我们需要继承它并实现__len__和__getitem__两个方法来定义我们自己的数据集类。在__getitem__方法中,我们可以使用Python的json库来读取和解析JSON文件,并将数据进行预处理。 在数据预处理阶段,我们可以使用PyTorch中的transforms模块来进行常见的图像处理操作,例如裁剪、缩放、旋转等。这些处理操作可以应用于加载的JSON数据,以使其适用于我们的模型。另外,我们还可以通过实现自定义的数据转换函数来进行更复杂的数据处理操作。 一旦我们完成了数据集的加载和预处理,我们可以使用DataLoader类来生成一个可迭代的数据加载器。该加载器将自动处理数据的批处理、随机排序和多线程加载等细节,方便我们在训练过程中高效地加载和处理数据。 总而言之,PyTorch提供了丰富的功能和工具来处理JSON数据集。我们可以使用Dataset和DataLoader类来加载和预处理数据,并利用transforms模块和自定义函数来进行数据转换。通过这些操作,我们可以轻松地准备我们的数据,并将其用于PyTorch模型的训练和评估过程中。 ### 回答3: PyTorch是一个开源的深度学习框架,用于构建和训练神经网络模型。在PyTorch中,我们可以使用JSON数据集来加载和处理数据。 JSON(JavaScript Object Notation)是一种常用的轻量级数据交换格式,它以易于阅读和编写的方式表示结构化数据。JSON数据集通常由一个JSON文件组成,其中包含一个或多个样本的信息。 首先,我们需要使用Python的json库来读取和解析JSON文件。通过使用`json.load()`方法,我们可以将JSON文件中的内容加载为Python字典类型的对象。然后,我们可以使用Python的字典操作来访问和处理数据。 在PyTorch中,我们通常将数据加载到自定义的Dataset类中。我们可以创建一个继承自torch.utils.data.Dataset的子类,并实现其中的`__getitem__()`和`__len__()`方法来处理数据。在`__getitem__()`方法中,我们可以通过索引来访问和提取具体的样本数据,并对其进行预处理。 一种常见的做法是将JSON文件中的每个样本表示为一个字典,在字典中存储不同的特征和对应的标签。我们可以在`__getitem__()`方法中使用`json_data[索引]`来访问特定索引处的样本,然后从字典中提取所需的数据。 另一种常见的做法是将JSON文件中的每个样本表示为一个字符串对象,其中包含所有样本的信息。我们可以使用`json.loads()`方法将字符串转换为JSON对象,并进一步提取所需的特征和标签信息。 最后,我们可以使用PyTorch的DataLoader类来批量加载和处理JSON数据集。通过设置参数如batch_size、shuffle等,我们可以灵活地配置数据加载和处理的方式。 总的来说,PyTorch提供了灵活而强大的工具,可以处理和加载JSON数据集。我们可以根据具体的需求,使用不同的方法来读取JSON文件并提取所需的数据,然后在自定义的Dataset类中进行进一步的处理和批量加载,以便用于训练和评估神经网络模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值