如何用小样本训练高性能深度网络
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用小样本训练高性能深度网络相关的知识,希望对你有一定的参考价值。
参考技术A本文借鉴 http://blog.csdn.net/caanyee/article/details/52502759 ,自学使用.
为了尽量利用我们有限的训练数据,我们将通过一系列随机变换对数据进行提升,这样我们的模型将看不到任何两张完全相同的图片,这有利于我们抑制过拟合,使得模型的泛化能力更好。
在Keras中,这个步骤可以通过 keras.preprocessing.image.ImageGenerator 来实现
用以生成一个batch的图像数据,支持实时数据提升。训练时该函数会无限生成数据,直到达到规定的epoch次数为止。
参数
举个例子:
附带一个错切的程序
数据提升是对抗过拟合问题的一个武器,但还不够,因为提升过的数据仍然是高度相关的。 对抗过拟合的你应该主要关注的是模型的“熵容量” ——模型允许存储的信息量。能够存储更多信息的模型能够利用更多的特征取得更好的性能,但也有存储不相关特征的风险。另一方面,只能存储少量信息的模型会将存储的特征主要集中在真正相关的特征上,并有更好的泛化性能。
有很多不同的方法来调整模型的“熵容量”,常见的一种选择是调整模型的参数数目,即模型的层数和每层的规模。另一种方法是对权重进行正则化约束,如L1或L2.这种约束会使模型的权重偏向较小的值。
在我们的模型里,我们使用了很小的卷积网络,只有很少的几层,每层的滤波器数目也不多。再加上数据提升和Dropout,就差不多了。Dropout通过防止一层看到两次完全一样的模式来防止过拟合,相当于也是一种数据提升的方法。(你可以说dropout和数据提升都在随机扰乱数据的相关性)
然后对训练集,验证集进行数据提升
class_mode是很重要的,返回标签,如果是categorical,那么就是one-hot型,如果是binary,那么就是0,1,如果是sparse那么就是1或者8这样的.
所以第一步:
第二步,写出提升训练集的类
第三步,提升训练集类的实体化
第四步,训练
以上是关于如何用小样本训练高性能深度网络的主要内容,如果未能解决你的问题,请参考以下文章
2021年科大讯飞 基于深度学习的小样本分类识别任务挑战赛前三名队伍分享