深度学习如何调参和分析问题的方法

深度学习调参有哪些技巧

一、怎样训练一个不错的网络呢

1.刚开始, 先上小规模数据, 模型往大了放, 只要不爆显存, 能用256个filter你就别用128个. 直接奔着过拟合去(造成过拟合的原因:a.数据太少,导致无法描述问题的真实分布; b.参数太多,模型就会变得复杂,拟合数据分布的能力就强,复杂模型就会过度的去拟合训练集所刻画的分布)没错, 就是训练过拟合网络, 连测试集验证集这些都可以不用.
2. Loss设计要合理. 一般来说分类就是Softmax, 回归就是L2的loss,然后还要注意loss的错误范围不要太大,太大的话结果会是nan。你预测一个label是10000的值, 模型输出0, 你算算这loss多大, 这还是单变量的情况下。所以不仅仅输入要做normalization, 输出也要这么弄。 然后就是多任务情况下, 各loss想法限制在一个量级上, 或者最终限制在一个量级上, 初期可以着重一个任务的loss
3. 观察loss胜于观察准确率,准确率虽然是评测指标, 但是训练过程中还是要注意loss的. 你会发现有些情况下, 准确率是突变的, 原来一直是0, 可能保持上千迭代, 然后突然变1. 要是因为这个你提前中断训练了, 只有老天替你惋惜了. 而loss是不会有这么诡异的情况发生的, 毕竟优化目标是loss。(重要)
4. 确认分类网络是否学习充分,分类网络就是学习类别之间的界限. 你会发现, 网络就是慢慢的从类别模糊到类别清晰的. 怎么发现? 看Softmax输出的概率的分布, 如果是二分类, 你会发现, 刚开始的网络预测都是在0.5上下, 很模糊. 随着学习过程, 网络预测会慢慢的移动到0,1这种极值附近. 所以, 如果你的网络预测分布靠中间, 再学习学习.
5. Learning Rate设置合理:太大: loss爆炸, 或者nan。太小: 半天loss没反映。需要进一步降低了: loss在当前LR下一路降了下来, 但是半天不再降了。如果上面的Loss设计那块你没法合理, 初始情况下容易爆, 先上一个小LR保证不爆, 等loss降下来了, 再慢慢升LR, 之后当然还会慢慢再降LR。 LR在可以工作的最大值下往小收一收, 免得ReLU把神经元弄死了(这是因为如果梯度太大,而学习率又不小心设置得太大的时候,就会导致权重一下子更新过多,就有可能出现这种情况:举个例子:y = 3 x + 1,权重W=3,如果更新的步长很大,例如 ΔW = -100,那么就变成了 y=-97x+1了,有可能出现训练集中所有的样本经过这个映射,都变成小于 0 的数了,会使得ReLU把神经元弄死了)
参考链接:https://www.zhihu.com/question/67151971/answer/434079498
6. 对比训练集和验证集的loss,判断过拟合, 训练是否足够, 是否需要early stop的依据 (重要)早停法early stop
7. 清楚receptive field的大小,这个对效果的影响还是很显著的. 特别是用FCN, 大目标需要很大的receptive field
在这里插入图片描述
在这里插入图片描述
refer:
https://www.zhihu.com/question/25097993

二、分析问题的方法

当对原模型换了模块后,精度没提升反而下降的情况时,我们可以从两个层面进行分析:

1)模型层面:网络结构自身存在问题:如结构自身不适配等
可以通过网络结构的原理来定位这个问题:比如你加的模块是为了解决什么问题,是不是本身这个网络本身也能解决这个问题;
利用下面训练层面的分析方法来排除掉训练层面的问题从而定位到是网络上的问题。
③ 可视化特征图对分析这个问题没啥意义

2)训练层面:
可视化模型改变前后的loss曲线或者AP收敛曲线,对比一下两个模型收敛速度的差异,看看是否是未收敛造成的结果。比如说你加了这个模块后收敛速度变快但是效果差了一些,那很大概率可能就是有点过拟合了。
loss与准确率的关系,说明不是loss越低auc越高

可视化训练集,验证集的loss曲线,看看是否是由于数据集太小过拟合了训练集,所以在验证集上精度低。拟合了训练数据中的噪音和训练样例中没有代表性的特征。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于机器学习+深度学习+bert方法的虚假新闻检测项目源码.zip # Fake-News-Detection NKU_2022Fall Python language programming project **虚假新闻检测**项目,简单的**nlp分类**问题 使用**机器学习**、**深度学习**和**bert模型**解决问题 仓库中只上传了代码,大文件统统没有上传,下面网盘链接用于下载需要的大文件,照着文件夹融合网盘文件和代码文件即可 [所需附件下载链接](https://pan.baidu.com/s/1WpDSuQgC1HQaVNc8xlpuyQ?pwd=jzkl ) ### 问题描述 数据集是中文微信消息,包括微信消息的Official Account Name,Title,News Url,Image Url,Report Content,label。Title是微信消息的标题,label是消息的真假标签(0是real消息,1是fake消息)。训练数据保存在train.news.csv,测试数据保存在test.news.csv。 实验过程中先统计分析训练数据【train.news.csv】。根据train.news.csv中的Title文字训练模型,然后在test.news.csv上测试,给出Precision, Recall, F1-Score, AUC的结果。 ### 环境配置 使用anaconda集成开发环境,pytorch深度学习框架 具体配置方法我参考的博客链接:[PyTorch环境配置及安装_pytorch配置-CSDN博客](https://blog.csdn.net/weixin_43507693/article/details/109015177) ### 方法介绍 #### 机器学习模型 主要流程就是数据加载、预处理、特征工程、模型训练与评估,nlp的任务需要将文本数据转换成向量数据,这里用了词袋模型和`tyidf`两张方法。 代码在`traditional.py`中,都有现成的包用,简单调包调参就行,使用了随机森林、支持向量机、朴素贝叶斯、逻辑回归等方法,有的算法可以加入网格搜索与交叉验证调参,不过感觉如果想继续优化可能得在特征工程部分下手。 最后得到的结果: | 使用模型 | 向量化方法 | acc | recall(1) | precision(1) | auc | | :------------------------------: | :--------: | :----: | :-------: | :------------: | :--: | | 朴素贝叶斯+jieba精确模式 | 词袋模型 | 84.33% | 0.60 | 0.47 | 0.74 | | 同上 | tyidf | 88.97% | 0.33 | 0.80 | 0.66 | | 高斯内核支持向量机+jieba搜索引擎 | 词袋模型 | 86.62% | 0.10 | 0.84 | 0.55 | | 同上 | tyidf | 91.21% | 0.46 | 0.89 | 0.72 | | 随机森林+jieba精确模式 | 词袋模型 | 87.03% | 0.12 | 0.97 | 0.56 | | 同上 | tyidf | 87.18% | 0.13 | 0.98 | 0.56 | | 逻辑回归+jieba精确模式 | 词袋模型 | 90.48% | 0.50 | 0.77 | 0.74 | | 同上 | tyidf | 89.33% | 0.37 | 0.79 | 0.68 | #### 神经网络解决

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值