最近在借助百度飞桨平台学习机器学习的代码的时候,发现很多基础知识都不会,特此记录一下。
1. BATCH
在训练模型的过程中,由于电脑的硬件性能如内存、显存问题,我们不会将数据一次性导入训练,而是分批次,批次就是BATCH,每个批次里面的数据大小就是BATCH_SIZE。
2. BUF
BUFFER为缓冲的意思,因此BUF_SIZE自然就是缓冲数据的大小的意思,表示缓冲区只能存下BUF_SIZE大小的数据。
3. 实例
#用于训练的数据提供器,每次从缓存中随机读取批次大小的数据
train_reader = paddle.batch(
paddle.reader.shuffle(paddle.dataset.uci_housing.train(),
buf_size=BUF_SIZE),
batch_size=BATCH_SIZE)
paddle是百度飞桨的深度学习框架,里面有很多封装好的API接口可以直接调用。
batch(reader,batch_size,drop_last=False)共有两个参数,第一个是要读入的数据,第二个是每批次的数据大小(批尺寸),第三个默认为False,表示不丢弃最后一个batch,若修改为True,则修改为丢弃最后一个batch。
在读取数据的过程中,又有一个新的API:buffer(reader, buffer_size),官方文档中这么介绍:
该接口创建一个数据读取器,其功能是将原始数据读取器的数据打乱,然后返回无序的数据。
从原始数据读取器取出buf_size个数据到缓冲区,将缓冲区数据打乱,然后将无序的数据依次返回。当缓冲区数据全部输出后,再次执行上述步骤。
shuffle函数的作用:增加随机性,提高网络的泛化性能,避免因为有规律的数据出现,导致权重更新时的梯度过于极端,避免最终模型过拟合或欠拟合。