代码延伸
1、数据处理技巧:Batch Normalization(批归一化)、Data Augmentation(数据增强)
2、上采样和下采样
三、Epoch、Batch以及Batch size的设定
Epoch(时期):
当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一次>epoch。(也就是说,所有训练样本在神经网络中都进行了一次正向传播 和一次反向传播 )
再通俗一点,一个Epoch就是将所有训练样本训练一次的过程。
然而,当一个Epoch的样本(也就是所有的训练样本)数量可能太过庞大(对于计算机而言),就需要把它分成多个小块,也就是就是分成多个Batch 来进行训练。
为什么要使用多于一个epoch?
在神经网络中传递完整的数据集一次是不够的,而且我们需要将完整的数据集在同样的神经网络中传递多次。但请记住,我们使用的是有限的数据集,并且我们使用一个迭代过程即梯度下降来优化学习过程。因此仅仅更新一次或者说使用一个epoch是不够的。
Batch(批 / 一批样本):
将整个训练样本分成若干个Batch。
Batch_Size(批大小):每批样本的大小。
Batch Size的大小影响模型的优化程度和速度。同时其直接影响到GPU内存的使用情况,假如GPU内存不大,该数值最好设置小一点。
每一个epoch训练次数与batch_size大小设置有关。因此如何设置BATCH_SIZE大小成为一个问题。
BATCH_SIZE:即一次训练所抓取的数据样本数量。
BATCH_SIZE的大小影响训练速度和模型优化,其大小同样影响每一epoch训练模型次数。
BATCH_SIZE带来的好处是:最大的好处在于使得CPU或GPU满载运行,提高了训练的速度。其次是使得梯度下降的方向更加准确。
若BATCH_SIZE=m(训练集样本数量);相当于直接抓取整个数据集,训练时间长,但梯度准确,但不适用于大样本训练,比如IMAGENET。只适用于小样本训练,但小样本训练一般会导致过拟合[1]现象,因此不建议如此设置。
若BATCH_SIZE=1;梯度变化波动大,网络不容易收敛。
若BATCH_SIZE设置合适,梯度会变准确。
此时再增加BATCH_SIZE大小,梯度也不会变得更准确。
同时为了达到更高的训练网络精度,应该增大epoch,使训练时间变长。
四、索引
五、枚举:enumerate () 函数用于将一个可遍历的数据对象 (如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标。
六、