[笔记]飞浆PaddlePaddle-百度架构师手把手带你零基础实践深度学习-21日学习打卡(Day 3)
(Credit: https://gitee.com/paddlepaddle/Paddle/raw/develop/doc/imgs/logo.png)
MNIST数据集
MNIST数据集可以认为是学习机器学习的“hello world”。最早出现在1998年LeCun的论文1中,是NIST数据集的延伸,具体细节可以在LeCun的个人主页找到。
MNIST数据集是为了手写数字识别任务
- 包含:60,000个训练样本,10,000个测试样本。
- 每个样本是28*28像素的灰度图片
- 每个样本对于0-9的数字标签
构建模型和完成训练的程序
- 数据处理:读取数据 和 预处理操作
- 模型设计:网络结构(假设)
- 训练配置:优化器(寻解算法) 和 计算资源配置
- 训练过程:循环调用训练过程,前向计算 + 损失函数(优化目标) + 后向传播
- 保存模型:将训练好的模型保存
查阅API的方法
- API文档地址 (Version 1.8)
- 查阅文档的两种方法:搜索和分类浏览
- API说明结构:函数形式,功能说明,计算公式,参数和返回值,代码示例
处理数据
- 训练样本集乱序
- 建立ID集 index_list
- 乱序index_list
- 以新顺序读取数据
- 生成批次数据
- 设置batchsize
- 数据转变成符合要求的
np.array
要求 - Python生成器:
yield
,减少内存占用
- 校验数据的有效性
- 校验并刨除不合预期的数据
异步读取数据
- 同步读取 vs 异步读取
- 同步读取:IO和网络计算串行,速度慢
- 异步读取:IO和计算通过一个“异步队列”交互,IO把数据不停放入队列,网络计算不同从队列取数据,二者同时进行
- PyReader
- 飞桨提供的异步数据读取器,只需要修改两行代码
- 创建一个DataLoader对象用于加载Python生成器产生的数据,数据会由Python线程预先读取,并异步送入设定了容量上限的队列中
# 定义DataLoader对象用于加载Python生成器产生的数据
data_loader = fluid.io.DataLoader.from_generator(capacity=5, return_list=True)
# 设置数据生成器
data_loader.set_batch_generator(train_loader, places=place)
说明:
capacity (int)
- DataLoader对象内部维护队列的容量大小。单位是batch数量。若reader读取速度较快,建议设置较大的capacity值。return_list (bool)
- 每个设备上的数据是否以list形式返回。动态图模式下使用return_list = True。- 详见官方文档
Reference
LeCun, Y., Bottou, L., Bengio, Y. and Haffner, P., 1998. Gradient-based learning applied to document recognition. Proceedings of the IEEE, 86(11), pp.2278-2324. ↩︎