2020-04-29

                                       模型训练

训练模型时,模型的准确率跟 

1.数据量

2.batch_size 的大小

3.epochs 的次数

4.学习率的大小都有关

如果测试集的准确率小于训练集的,可能的原因是:

1.没有打乱测试集

2.过拟合

3.学习率太高

改进

1.预测时使用 from sklearn.utils import shuffle 该句,调用 shuffle 模块将数据打乱

这个方法是行不通的!!!!因为测试集的图片和标签是一一对应的,如果打乱,就无法预测了

2.适当的降低学习率(0.0001)

优化器 sgd 的学习率一般设置为0.01!!很重要,batch_size = 75(SGD 优化器的 batch_size 一般设置的大些,效果好)

通过代码测试,SGD 的学习率与训练次数成比例,lr / echo 约等于 1/200

----------------------------------------------------------------

opt = keras.optimizers.RMSprop(learning_rate=0.0001, decay=1e-6)

而 RMSprop 的学习率一般为 0.0001,batch_size = 32

3.数据量小,使用数据增强

4.利用正则化

5.利用 dropout 层

6.找个好的优化器会节省大量训练时间

使用  SGD 优化器训练 300 次出现的效果和使用 Adam 优化器训练 40 次出现的现象差不多,准确率都开始震荡,说明模型不稳定.但是训练200-300次的预测效果要比60次的效果好,200-300次训练,虽然准确率和 loss 都在 0.8 左右,但是实际预测结果很准确:

而训练60次的结果确实这样:


使用Adam优化器训练60次的结果,有3个预测错误


对 cnn 卷积神经网络的思考:

训练神经网络需要大量的数据,如 cifar10 数据集(small dataset),里面有 5 万张 10 种类别的图片,利用cnn结构,使用 RMSprop 优化器,经过 100 次训练,训练时还要使用数据增强技术,最终模型的准确率在测试集上可以达到 80% 左右.若使用 SGD 优化器,不使用数据增强技术,大约需要训练 200 次左右,可达到 80% 的准确率。随着训练次数的增加,模型在训练集上的准确率先增后减(RMSprop -- 100 次,SGD--200次,Adam--70次左右),说明模型不稳定。而且由此也可以看出优化器的性能:Adam > RMSprop > SGD

神经网络的优化

1.当激活函数的输出为有限值时,基于梯度的方法更稳定

    当激活函数的输出为无限值时,建议调小学习率

2.sigmoid 函数的导数分布在0-0.25之间,在进行反向传播时存在多个0-0.25之间的数相乘,导致结果变的很小,出现梯度消失

3.使用 relu 函数时,需要将数据归一化,变成正态分布,减小参数分布的巨大变化,设置更小的学习率,减缓负神经元数量

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 想读六大热门工科专业? 必选这些大学! 今天为大家介绍的是现在和未来几年热门且高薪的工科专业,应该选择哪些高校才能...
    好将来高考规划中心阅读 1,508评论 0 0
  • 输入数据准备 本教程要求eMAGMA 文件, 软件 (MAGMA) 和辅助文件都在同一个目录下如果你的文件在不同的...
    程凉皮儿阅读 5,651评论 0 1
  • 今天早上用喜马拉雅听了李克富老师的文章《心理杂诅》文章题目是:爱的力量。后面的反思我没有过多的思考,但是作为一名刚...
    fcff1351b006阅读 984评论 0 1
  • 前不久,乐视的新董事长孙宏斌走马上任,但是面对水深火热当中的乐视还是无从下手,债务仍然没有还清、战略还没有立定,这...
    何玺阅读 2,656评论 1 1
  • 曾经像钱钟书一样背诵过字典,特地选了薄薄的《新华字典》;曾经因迷恋上他的《围城》,还有女主郝思嘉永远也不会...
    纯熙2019阅读 5,449评论 28 47