初步搭建好深度神经网络,提高准确率方法总结

当初步搭建好网络,模型能出初步结果后,若想优化,可以考虑调整:

1.数据集扩增

一般增加数据集容量,训练后的准确率会得到明显提升。

2.增大数据集差异性,随机性

在制作数据集时可以考虑增加数据的差异性,随机性。

3.使用tensor transform对数据进行预处理

pytorch 中使用transform模块对数据进行预处理。

原因:transform可以提升数据泛化能力包括:数据中心化、数据标准化、缩放、裁剪、旋转、翻转、填充、噪声添加、灰度变换、线性变换、仿射变换、亮度、饱和度及对比度变换等。

4.调节batch_size大小

调整batch_size大小,可以16,32,64….这样依次往上调,寻找最适合的,当然不必要是2的倍数

原因:batch size的大小决定了深度学习训练过程中的完成每个epoch所需的时间和每次迭代(iteration)之间梯度的平滑程度。batch size过小,花费时间多,同时梯度震荡严重,不利于收敛;batch size过大,不同batch的梯度方向没有任何变化,容易陷入局部极小值。

5.设置shuffle=True

随机读取数据,一般在训练网络时使用,对于小数据集来说效果惊人。

原因:shuffle方法,用来打乱数据集中数据顺序,以避免数据投入的顺序对网络训练造成影响。
增加随机性,提高网络的泛化性能,避免因为有规律的数据出现,导致权重更新时的梯度过于极端,避免最终模型过拟合或欠拟合。因为按照某些顺序投入容易在训练中走偏或陷入局部最优使得训练效果出现差异,尤其是当batch size比较小的时候。

6.调节学习率(learning rate)

可以使用动态学习率,也可以先是大的学习率 ,然后慢慢减小,如开始是0.1,然后是0.05,每一次都对半分,寻找最合适的学习率。

原因:将输出误差反向传播给网络参数,以此来拟合样本的输出。本质上是最优化的一个过程,逐步趋向于最优解。但是每一次更新参数利用多少误差,就需要通过一个参数来控制,这个参数就是学习率(Learning rate),也称为步长。

学习率 大学习率 小
学习速度
使用时间点刚开始训练时一定轮数过后
副作用1.易损失值爆炸;2.易振荡。1.易过拟合;2.收敛速度慢。

最理想的学习率不是固定值,而是一个随着训练次数衰减的变化的值,也就是在训练初期,学习率比较大,随着训练的进行,学习率不断减小,直到模型收敛。

7.权重衰减 (weight_decay)

原因:L2正则化的目的就是为了让权重衰减到更小的值,在一定程度上减少模型过拟合的问题,所以权重衰减也叫L2正则化。

8.适当增加训练轮次(num_epochs)

当准确率难以上升,可以增加训练轮次,让网络充分学习,当然要防止过拟合。

原因:epochs被定义为向前和向后传播中所有批次的单次训练迭代。one epoch = numbers of iterations = N = 训练样本的数量/batch_size。设置大小与数据集的多样化程度有关, 一般多样化程度越强, epoch 越大。

9.dropout()参数及位置

dropout() 的参数可以从0.1开始调,以0.05为间隔,各个网络有不同的参数。所放的位置也有很大的影响,不一定要在全连接层后。

原因:dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。dropout可以比较有效地减轻过拟合的发生,一定程度上达到了正则化的效果。

10.参数初始化

pytorch中会有默认的参数初始化。

如果没有,可以考虑自行初始化,有助于提高准确率。

11.调整网络结构(层数,每层的大小,函数)

可以考虑增加层次,或者调整输出的大小来提高准确率。

 

    原文作者:行秋
    原文地址: https://blog.csdn.net/weixin_43042683/article/details/121000763
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞