网站建设制作网络公司,wordpress分类图标列表,做网站 超速云,杭州网站建设洛洛科技前言#xff1a; DNN 是神经网络的里面基础核心模型之一.这里面结合DNN 介绍一下如何解决
深度学习里面过拟合,欠拟合问题 目录#xff1a; DNN 训练常见问题 过拟合处理 欠拟合处理 keras 项目 一 DNN 训练常见问题 我们在深度学习网络训练的时候经常会遇到下面…前言 DNN 是神经网络的里面基础核心模型之一.这里面结合DNN 介绍一下如何解决
深度学习里面过拟合,欠拟合问题 目录 DNN 训练常见问题 过拟合处理 欠拟合处理 keras 项目 一 DNN 训练常见问题 我们在深度学习网络训练的时候经常会遇到下面两类问题 1 训练集上面很差 欠拟合 2 训练集上面很好, 测试集上面很差 过拟合 二 过拟合解决 过拟合解决方案 主要有以下三个处理思路 1 Early Stopped 2 L1 L2 正规化 3 Dropout 4 增加训练集上面的数据量 2.1 Early Stopping 方案 这个数据集分为3部分 Training Data,validation data,Test Data 1 将训练的数据分为Training Data 和validation data 2 每个epoch结束后或每N个epoch后)计算validation data 的 accuracy 3: 更新 最优 validation data accuracy 对应的网络参数 3 随着epoch的增加如果validation data 连续多次没有提升则停止训练 4 将之前validation data 准确率最高时的权重作为网络的最终参数。 2.2 正规化 分为L1,L2 正规化. 2.3 Dropout 原网络结构 训练 Dropout : 上面每个输入值以p%的概率变为0 测试 权重系数 一般p 设置为0.5 、
4 增加数据集上面数据量 作用 降低方差 三 欠拟合 欠拟合处理方案 主要有下面5个处理思路 1 超参数调节 学习率 训练轮次,batch_size 2 更换激活函数 3 梯度更新算法优化 4 网络模型优化 5 损失函数 更换
3.1 超参数调参 主要更换学习率增加迭代轮数等 3.2 更换激活函数 DNN 随着网络层数的增加会出现梯度弥散现象可以通过把激活函数sigmod 更换为
ReLu 一定程度上面优化该方案。 更换激活函数 ReLu(导数为1,链式求导的时候连乘不会减少) 增加,减少 网络层数梯度弥散,梯度爆炸 3.3 梯度更新优化算法 方案1 SGD 随机梯度下降 当梯度为0参数无法更新容易陷入到局部极小值点 学习率太大 不容易进入到极小值点容易发生网络震荡 学习率太小 收敛速度慢 方案2 Momentum: 当前的梯度 当前的梯度历史梯度 SGD 会发生震荡而迟迟不能接近极小值所以对更新梯度引入Momentum概念加速SGD并抑制震荡也就是在SGD基础上引入了一阶动量 初始化动量 : 动量 : 动量 整个思想 有点跟马尔科夫链时序链相似当前输出值不仅仅跟当前的 输入相关,也跟历史值相关。 方案3Adagrad Adaptive Gradient自适应梯度) 不同参数进行不同程度的更新 - 逐参数适应学习率方法 方案 在Adagrad算法中每个参数的学习率各不相同。计算某参数的学习率时需将该参数前面所有时间步的梯度平方求和随着时间步的增加学习率将减小. 二阶动量权重系数里面的每个系数单独计算 : 当前权重系数的梯度 Adgrad方法中学习率一直在衰减所以可以起到抑制震荡的作用 对于频繁更新的参数它们的二阶动量比较大学习率小 对于不怎么更新的参数它们的二阶动量比较小学习率就大。 但因为那个分母是单调递增的会使得学习率单调递减至0可能会使得训练过程提前结束即便后续还有数据也无法学到必要的知识 方案4 RMSProp:
Root Mean Square Propagation自适应学习率方法由Geoff Hinton提出是梯度下降优化算法的扩展。在AdaGrad的基础上对二阶动量的计算进行了改进即有历史梯度的信息但是我又不想让信息一直膨胀那么只要让历史信息一直衰减就好了。因此得到RMSProp的二阶动量计算公式
如下图所示截图来自https://arxiv.org/pdf/1609.04747.pdf 方案4 Adam算法即自适应时刻估计方法Adaptive Moment Estimation 算法思想 momentAdagrad
同时考虑了动量 和二阶动量 3.4 更换损失函数 比如mse 更换成CRE 3.5 更换模型 增加网络层次参数例如 或者 RNN 用LSTM CNN 里面的ResNet 解决梯度弥散问题 四 keras Keras是一个由Python编写的开源人工神经网络库可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口进行深度学习模型的设计、调试、评估、应用和可视化 [1]。 Keras在代码结构上由面向对象方法编写完全模块化并具有可扩展性其运行机制和说明文档有将用户体验和使用难度纳入考虑并试图简化复杂算法的实现难度 [1]。Keras支持现代人工智能领域的主流算法包括前馈结构和递归结构的神经网络也可以通过封装参与构建统计学习模型 [2]。在硬件和开发环境方面Keras支持多操作系统下的多GPU并行计算可以根据后台设置转化为Tensorflow、Microsoft-CNTK等系统下的组件 [3]。 Keras的主要开发者是谷歌工程师François Chollet此外其GitHub项目页面包含6名主要维护者和超过800名直接贡献者 [4]。Keras在其正式版本公开后除部分预编译模型外按MIT许可证开放源代码 [1] keras 创建一个神经网络,训练,测试主要流程如下
model模型搭建compile损失函数loss, batch_sizefit训练evaluate验证测试集predict预测
model Sequential()#输入层
model.add(Dense(input_dim28*28,
units 500,
activationrelu))#1 隐藏层
model.add(Dense(units500,
activationrelu))#2 输出层
model.add(Dense(units10,
activationsoftmax))model.compile(losscategorical_crossentropy,
optimizeradam
metrics [accuracy])#3 pick the best function ,完成训练工作
model.fit(x_train, y_train, batch_size100, epochs20)#4 使用该模型
score model.evaluate(x_test,y_test)
result model.predict(x_test) 参考
9-1: Tips for Training DNN_哔哩哔哩_bilibili
【优化算法】一文搞懂RMSProp优化算法 - 知乎
神经网络-优化器篇-从梯度下降到Adam方法 - 知乎
https://www.cnblogs.com/picassooo/p/12347927.html