深度学习训练过程中的技巧深刻总结
深度学习训练模型技巧
- 1 训练过程经常遇到的问题
- 1.1 损失值为nan
- 1.2 训练效果差
- 1.2.1 损失值很低,正确率很高,但miou很差
- 1.2.2 损失值来回变,准确率或者miou忽大忽小
- 1.2.3 损失值大于0.0001
- 1.3 识别效果差
- 1.3.1 欠拟合
- 1.3.2 过拟合
- 1.3.3 样本类型太少
- 1.4 速度慢
- 1.4.1 没用gpu
- 1.4.2 参数确实太多了
- 2 遥感识别遇到的问题
- 2.1 正负样本失衡
- 2.1.1 增加负样本
- 2.1.2 样本迭代
- 2.1.3 整体设计和训练时随机应变结合
- 2.2 迭代迭代再迭代
- 2.3 注意开始的评价指标设计
- 2.4 一定要注意是哪里出现问题
- 2.5 样本一定要准确
- 2.6 深度学习只是遥感影像处理过程的一部分
- 2.7 每种影像有不同的用处和玩法
- 2.8 多看论文和技术博客
- 3 学习率
- 4 批次量
- 5 其它一些超参数
- 6 其它优化
1 训练过程经常遇到的问题
1.1 损失值为nan
(1)损失函数写错了
(2)未进行归一化或者标准化
1.2 训练效果差
先看损失值,再看准确率和miou等
1.2.1 损失值很低,正确率很高,但miou很差
正负样本失衡
正负样本比例差别太大了,比如语义分割,可能是1:20000
解决:平衡正负样本的比例,
(1)减小样本的大小,这样提高正样本的比例
(2)增加focal_loss损失函数,增加正样本损失值的比例
(3)样本错标漏标严重
1.2.2 损失值来回变,准确率或者miou忽大忽小
1 学习率太大了,在最优点附近来回跳动,改进学习率,最好使用动态学习率,开始大,最后小。
2 批次量太小了,梯度下降方向不一致。
3 样本错标漏标严重,机器也不知道哪个是哪个不是
1.2.3 损失值大于0.0001
说明还没拟合,欠拟合
1.3 识别效果差
1.3.1 欠拟合
看训练过程的损失值,是否还在一直下降,可能是训练的epoch太少了。
1.3.2 过拟合
拟合的太好了,说明样本太少,或者训练次数太多,
(1)增加样本量,尤其是其它类型的
(2) 减少epoch提前停止训练,保存模型
1.3.3 样本类型太少
训练样本包含的类型太少,模型对没见过的图像识别不来。
1.4 速度慢
1.4.1 没用gpu
问题
有时候直接使用gpu的tensorflow时,会报错,这时候可能是gpu内存爆了,不要着急去使用cpu,先用第一种方式试一试,不行了再用cpu,cpu实在太慢了
1 使用gpu,
physical_device = tf.config.experimental.list_physical_devices(“GPU”)
tf.config.experimental.set_memory_growth(physical_device[0], True)
使用cpu的时候需要把这个删除了
2 使用cpu
#os.environ[“CUDA_VISIBLE_DEVICES”] = “-1”
1.4.2 参数确实太多了
用轻量级模型
2 遥感识别遇到的问题
2.1 正负样本失衡
2.1.1 增加负样本
正负样本失衡的时候,先把带有正样本的找出来训练,但是测试结果会很差,尤其当识别整幅影像的时候,需要加入丰富的负样本,这样才能得到一个比较好的结果。
2.1.2 样本迭代
需要边训练样本,边看效果,边增加修改样本,这样迭代多次才能达到一个好的效果。不能只看miou指标,在视觉上指标好,结果也有时候出现一些会出现明显从错误。这是很致命的,你大部分很好,但是一些不该识别错误的地方却识别错了,让人就怀疑你的准确性了。
2.1.3 整体设计和训练时随机应变结合
开始有个整体设计,但是训练时会出现各种结果,要及时调整
调整放方向,先从大方向改进,再微调:
(1)换模型
(2)样本改进
(3)训练epoch增加减少,至少几千个样本训练100epoch,
当出现了比较好的结果以后,再尝试其它改进,改进只是为了略微增强模型效果,上面3个才是影响结果的主要因素:
(1)批次量
(2)学习率
(3)激活函数
(4)结构调整
(5)样本增强,增加泛化性。
2.2 迭代迭代再迭代
做工程的时候一定要注意迭代,不断的迭代
每次迭代看的效果如下:
(1)损失值是否还可以下降
(2)训练集,验证集的结果
(3)整景影像的识别结果。
当上面3个方向基本ok了,模型就几乎差不多了,再进行一些小的改进。
2.3 注意开始的评价指标设计
开始的指标一定要设计好了,每进行一次实验,根据实验进行下一步的计划设计。
2.4 一定要注意是哪里出现问题
(1)是样本涵盖类型不全,样本制作错误,还是整幅样本不平衡
(2)还是模型欠拟合过拟合
(3)还是模型识别能力就有问题,需要换模型
2.5 样本一定要准确
样本决定了识别结果,模型算法只是为了接近这个结果。通过样本的迭代发现哪里有一些难分错分样本,放到样本数据集中,让模型学到更多的内容。
2.6 深度学习只是遥感影像处理过程的一部分
深度学习技术只是遥感影像分类中的一个方法,整个工程的实现一定要关注遥感影像处理的各个部分,每个部分都要实现,预处理,后处理等,不能只局限于深度学习。
遥感影像处理——遥感影像处理全流程_xiaotiig的博客-CSDN博客_遥感影像数据处理 https://blog.csdn.net/xiaotiig/article/details/112556242
2.7 每种影像有不同的用处和玩法
无人机、亚米级分辨率的影像,几十米、几百米分辨率的影像都有自己的作用,不要说30米的识别不出房子,只不过看你怎么说了。在多大程度上能识别出来,尽管分辨率大,但是还是有用的。
2.8 多看论文和技术博客
做项目事情前一定要调研,看别人是怎么做的,你学习好了再指定计划去做。不要一拿到任务就赶紧去弄。
3 学习率
主要改变损失值下降的快慢,
太大会导致损失值来回跳动
太小会导致收敛速度慢,需要更多的epoch
4 批次量
一般越大越好
但是太大可能超出电脑内存
5 其它一些超参数
(1)损失函数对不对,合不合适
(2)激活函数
(3)优化器改变一下。
6 其它优化
(1)数据增强
(2)超参数改进
(3)结构改进
深度学习训练过程中的技巧深刻总结相关推荐
- Python - 深度学习训练过程使用matplotlib.pyplot实时动态显示loss和acc曲线
1 深度学习训练过程中实时动态显示loss和acc曲线 可参考代码如下: # -*- coding: utf-8 -*-import matplotlib.pyplot as pltif __name ...
- 机器深度学习的过程中盛传着7 个误解,我们来一一揭开
https://www.toutiao.com/a6690402605824213508/ 2019-05-13 14:59:45 哥伦比亚大学计算机科学专业博士生Oscar Chang发博阐述了关於 ...
- 深度学习——训练过程
传统神经网络的训练方法为什么不能用在深度神经网络? BP算法作为传统训练多层网络的典型算法,实际上对仅含几层网络,该训练方法就已经很不理想.涉及多个非线性处理单元层的深度结构的非凸目标代价函数中普遍存 ...
- 最全深度学习训练过程可视化工具(附github源码)
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 Datawhale干货 作者:Edison_G,来源:计算机视觉研究院 编辑丨极市平台 ...
- 的训练过程_最全深度学习训练过程可视化工具(附github源码)
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 Datawhale干货 作者:Edison_G,来源:计算机视觉研究院编辑丨极市平台. ...
- 微信监控机器学习、深度学习训练过程,可视化
五月两场 | NVIDIA DLI 深度学习入门课程 5月19日/5月26日一天密集式学习 快速带你入门阅读全文> 正文共765个字,3张图,预计阅读时间5分钟. 训练复杂的机器学习.深度学习 ...
- 深度神经网络训练过程中为什么验证集上波动很大_图神经网络的新基准
作者 | 李光明 编辑 | 贾 伟 编者注:本文解读论文与我们曾发文章<Bengio 团队力作:GNN 对比基准横空出世,图神经网络的「ImageNet」来了>所解读论文,为同一篇,不同作 ...
- 训练过程acc_AI 深度学习训练tricks总结(均有实验支撑)
↑↑↑↑↑点击上方蓝色字关注我们! 『运筹OR帷幄』转载 作者:Jones@知乎 作者丨Jones@知乎来源丨https://zhuanlan.zhihu.com/p/261999668编辑丨极市平台 ...
- 深度学习训练技巧总结
参考: 1 技巧链接一!重要 技巧链接二!重要 技巧链接三!重要 模型训练技巧最直接的就是几个超参数的设置 根据图片大小来选择网络和超参数 如果图片不是很大比如3030,这种情况下做分类就不能用VGG ...
最新文章
- [Linux内核]软中断与硬中断
- 一个用于录制用户输入操作并实时回放的小工具
- tomcat配置文件server.xml具体解释
- linux系统性能优化及瓶颈分析
- 外设位宽为8、16、32时,CPU与外设之间地址线的连接方法
- 了解JVM运行时的内存分配
- vue if判断_VUE学习记录2
- vue全局安装jquery,vue使用bootstrap框架,vue中封装websocket通讯,vue引入element-ui 组件库,引入highcharts图表插件
- self_number
- eclipse fat jar 打包插件
- 域渗透TIPS:获取LAPS管理员密码
- c语言常用数学函数6,C语言入门(6)——C语言常用数学函数
- AnkhSVN支持vs2012~2022
- 三极管、场效应管和MOS管三者的工作原理
- 计算机辅助翻译在翻译中的应用,计算机辅助翻译系统在翻译教学中的应用
- LibreCAD环境配置
- 期货法律法规重点笔记2
- Android APK加固(加壳)工具
- HTTP 请求头中的 X-Forwarded-For,X-Real-IP(nginx)
- 机器人学习--ROS学习入门