系列文章目录
第一章 深度学习入门——Paddle环境的搭建
前言
接下俩两篇文章我们将通过代码给大家一一介绍Paddle框架常用API,使大家更快更好的学习使用Paddle。
一、数据集的定义与加载
众所周知深度学习模型需要大量的数据来完成训练和评估,这些数据样本可能是图片(image)、文本(text)、语音(audio)等多种类型,而模型训练过程实际是数学计算过程,因此数据样本在送入模型前需要经过一系列处理,如转换数据格式、划分数据集、变换数据形状(shape)、制作数据迭代读取器以备分批训练等。
Paddle框架针对不同的需求已经帮我们封装好了相关API。
1.1直接加载数据集
对于一些经典的数据集,我们可以直接调用paddle.vision.datasets, paddle.textpaddle.vision.datasets,加载内置数据集。
接下来我们看一下Paddle框架都有哪些内置数据集。
import paddle
print('计算机视觉(CV)相关数据集:', paddle.vision.datasets.__all__)
print('自然语言处理(NLP)相关数据集:', paddle.text.__all__)
以MNIST为例我们来实现一下,如何直接调用内置数据集。
train_dataset = paddle.vision.datasets.MNIST(mode='train')
test_dataset = paddle.vision.datasets.MNIST(mode='test')
#内置的MNIST数据集已经划分好数据集,通过model传入的字符来区分
1.2 自定义数据集的读取
paddle.io.DataLoader API 对数据集进行多进程的读取,并且可自动完成划分 batch 的工作。
train_loader = paddle.io.DataLoader(train_custom_dataset, batch_size=64, shuffle=True, num_workers=1, drop_last=True)
# 通过上述方法,初始化了一个数据读取器 train_loader,用于加载训练数据集 custom_dataset。在数据读取器中几个常用的字段如下:
#batch_size:每批次读取样本数,示例中 batch_size=64 表示每批次读取 64 个样本。
#shuffle:样本乱序,示例中 shuffle=True 表示在取数据时打乱样本顺序,以减少过拟合发生的可能。
#drop_last:丢弃不完整的批次样本,示例中 drop_last=True 表示丢弃因数据集样本数不能被 batch_size 整除而产生的最后一个不完整的 batch 样本。
#num_workers:同步/异步读取数据,通过 num_workers 来设置加载数据的子进程个数,num_workers的值设为大于0时,即开启多进程方式异步加载数据,可提升数据读取速度。#
当然了读取数据集的方法各种各样,paddle只是提供了一个相对说简单方便的,在深度了解之后大家可以选择自己喜欢的方式
二、数据预处理
我们采集的数据不会全都是我们想要的,会存在各种各样的问题,如数据不一致、存在缺失值、噪声数据等。因此在进行正式的训练之前,我们需要数据集进行处理,解决上述问题。
好的预处理会使我们训练出来的模型训练更快、精准度更高,特别对于过拟合问题,预处理是解决此问题的重要方法。
接下来我们以图像数据为例来看一下paddle如何简单实现数据预处理。
我们先来看一下,paddle都内置了哪些图像数据处理方法
import paddle
print('图像数据处理方法:', paddle.vision.transforms.__all__)
这些方法我们既可以单独使用也可以组合使用,使用方法如下
单独使用:
from paddle.vision.transforms import Resize
# 定义一个待使用的数据处理方法,这里定义了一个调整图像大小的方法
transform = Resize(size=28)
组合使用:
通过Compose函数组合起来
from paddle.vision.transforms import Compose, RandomRotation
# 定义待使用的数据处理方法,这里包括随机旋转、改变图片大小两个组合处理
transform = Compose([RandomRotation(10), Resize(size=32)])
总结
这一篇我们先介绍这几种,下篇我们介绍模型组网。