目录
零、前言
一、构建自己的数据集
二、代码与分析
1、依赖库的导入
2、超参数以及CPU/GPU的设置
3、图像预处理模块的建立
4、数据的读取
码字不易,如果各位看官感觉该文章对你有所帮助,麻烦点个关注,如果有任何问题,请留言交流。如需转载,请注明出处,谢谢。
文章链接:
【深度学习】如何使用pytorch训练自己的数据(一)
零、前言
通过我之前的文章相信大家已经了解如何进行pytorch环境的搭建,以及了解了数据集的作用。今天我们就直接使用该环境进行实战,搭建一个框架,构件卷积神经网络,并且能够训练测试自己的数据集。如前期流程不懂的朋友,参见我以前的博文:
pytorch网络搭建 :
数据集的概念与区别:
首先,为什么我们不使用Minist等现有数据集进行测试?比如,用代码下载数据集然后读取文件,如何如何。我认为这并没有什么卵用,现实的工程实践都是自己采集处理的数据集,读取分析的都是自己的图像,现成的数据集对我们没有什么参考价值。
一、构建自己的数据集
冠字号是人民币的唯一标识,银行等通过冠字号来确定该钱币的来源与去向,所以本实验以冠字号码识别为例,进行讲解。首先将数据集分为训练集(Train)与验证集(Validation),训练集和验证集均对数字2、6、7、9,进行构件样本。
考虑到数据集的均衡性,每个训练集的每一个类别的训练样本个数为2000个左右。验证集的样本,每一个类别为100个左右。
每一个样本的大小为单通道32*32像素的灰度图。
构件好了数据集,我们就可以写代码了。
二、代码与分析
废话不多说,直接上代码。
1、依赖库的导入
首先就是先要导入我们所需要的各种库:
其中torch和torchvision就不用多说了,既然使用了pytorch那么这两个库是最基本的。
datasets:这里面有我们常用的几个数据集,当然,还可以加载我们自己的数据集;
transform:包含常用的图像处理操作,包含,随机切割,旋转,缩放等,以及数据类型的转换,比如,tensor到numpy的转换。
import torch
import torchvision
from torch.autograd import Variable
from torchvision import transforms
from torchvision import datasets
2、超参数以及CPU/GPU的设置
然后进行设置一下超参数,这里我们确定了batchSize,以及是否使用GPU
BATCH_SIZE = 64
DEVICE = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
print(DEVICE)
下图是我VSCODE的输出,证明我电脑上有GPU。
3、图像预处理模块的建立
下面将定义对数据的预处理模块,我们使用transforms对输入的图像(32*32)进行处理,这里我们将图像缩放至28*28,该操作是因为我们下面要定义的卷积神经网络的输入为28*28,为了更高效,你也可以在定义数据集的时候,直接将数据缩放至28*28,缩放后转换成tensor,这里训练集和验证集要做同样的处理,当然,针对你工程实践中的其他要求,还可以做其他的处理,在transforms.Compose中添加即可。
transform = transforms.Compose([
transforms.Resize((28, 28)),
transforms.ToTensor(),
])
transform_test = transforms.Compose([
transforms.Resize((28, 28)),
transforms.ToTensor(),
])
4、数据的读取
通过绝对路径对训练集和验证集进行读取,读取的同时做上面定义的预处理操作,datasets的方便之处就在于,他会自动加载图片与标签,你的每一个类别的文件夹名就是该图像的标签,非常的方便,非常的NICE。
#读取数据
dataset_train = datasets.ImageFolder('D:/PROJECTS/pythonProject/data/Train', transform)
dataset_test = datasets.ImageFolder('D:/PROJECTS/pythonProject/data/Validation',transform_test)
# 读取数据
print(dataset_train.imgs)
由下图可以看到,datasets自动确定了图像的类别,并给每个类别分配索引。相当的OK。
未完待续。。。