上QQ阅读APP看书,第一时间看更新
1.5 批量处理
在深度学习中,由于源数据都比较大,所以通常需要用到批处理。如利用批量来计算梯度的随机梯度法(SGD)就是一个典型应用。深度学习的计算一般比较复杂,并且数据量一般比较大,如果一次处理整个数据,较大概率会出现资源瓶颈。为了更有效地计算,一般将整个数据集分批次处理。与处理整个数据集相反的另一个极端是每次只处理一条记录,这种方法也不科学,一次处理一条记录无法充分发挥GPU、Numpy的平行处理优势。因此,在实际使用中往往采用批量处理(Mini-Batch)的方法。
如何把大数据拆分成多个批次呢?可采用如下步骤:
1)得到数据集
2)随机打乱数据
3)定义批大小
4)批处理数据集
下面我们通过一个示例来具体说明:
import numpy as np #生成10000个形状为2X3的矩阵 data_train = np.random.randn(10000,2,3) #这是一个3维矩阵,第1个维度为样本数,后两个是数据形状 print(data_train.shape) #(10000,2,3) #打乱这10000条数据 np.random.shuffle(data_train) #定义批量大小 batch_size=100 #进行批处理 for i in range(0,len(data_train),batch_size): x_batch_sum=np.sum(data_train[i:i+batch_size]) print("第{}批次,该批次的数据之和:{}".format(i,x_batch_sum))
最后5行结果:
第9500批次,该批次的数据之和:17.63702580438092 第9600批次,该批次的数据之和:-1.360924607368387 第9700批次,该批次的数据之和:-25.912226239266445 第9800批次,该批次的数据之和:32.018136957835814 第9900批次,该批次的数据之和:2.9002576614446935
【说明】批次从0开始,所以最后一个批次是9900。