python工具方法35 实现SWA,再一次提升模型的性能
2023-09-14 09:15:04 时间
SWA是论文Averaging Weights Leads to Wider Optima and Better Generalization所提出的一种无痛涨点的方式,只需要在模型训练的最后阶段保存模型权重,然后取模型权重的平均值,就可以提升模型的权重。按照论文描述,针对不同的模型基本上可以涨一个点。论文:SWA Object Detection详细描述了实验SWA后,模型的涨点效果。
SWA的论文翻译:https://github.com/timgaripov/swa
SWA的项目地址:https://github.com/timgaripov/swa
为此,博主根据论文描述和SWA作者公布的源码,仿照ema的模型增强技术代码,重新实现了swa。这里的实现支持torch、paddle(博主亲测,tf2模型也应该是支持的,只是要修改权重加载与保存的部分)。这里的实现是针对模型权重,对于pytorch的mmdetection框架,paddle的paddledetection框架中的模型都是支持的。博主亲测,用swa提升了0.5的map。
按照swa论文所述,当模型带bn层时,swa_model中的bn层参数需要重新更新。因此,博主刻意实现了一个forward函数,用于更新bn层的参数【针对mmdetection、paddledetection等框架时无效】。
1、SWA实现
博主这里实现的SWA支持在训练过程中使用,也支持在模型训练完成后选择模型进行权重平均。
针对于用户只需要关注两个函数update和smooth_dir。update用于在训练过程中调用(在合适的epoch中[epoch数大于budget时]进行权重平均),smooth_dir用于在模型训练
相关文章
- Python: 执行系统命令的四种方法(os.system、os.popen、commands、subprocess)
- Python中的 @staticmethod@classmethod方法
- python_控制台输出带颜色的文字方法
- Python 之 __new__() 方法与实例化
- Python字符串拼接的6种方法(转)
- Python深入学习之特殊方法与多范式
- python中列表元素连接方法join用法实例
- 【Python五篇慢慢弹(3)】函数修行知python
- 第九章 Python自定义模块及导入方法
- python处理多线程之间事件通讯方法
- paip.uapi 获取网络url内容html 的方法java php ahk c++ python总结.
- 零基础如何快速入门Python自动化办公?
- Python编程语言学习:python编程语言中重要函数讲解之map函数等简介、使用方法之详细攻略
- Python之pandas:将dict字典格式数据保存为dataframe格式数据的几种方法
- Python:python语言中与时间有关的库函数简介、安装、使用方法(获取当前时间/计算程序块前后运行时间/模型训练时间或耗费时间)之详细攻略
- Python之多线程:python多线程设计之同时执行多个函数命令详细攻略
- Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)—命令提示符cmd的几种方法
- Python之ffmpeg-python:ffmpeg-python库的简介、安装、使用方法之详细攻略
- 已解决2. Set PROTOCOL_BUPFERS_PYTHON_iMPLEMENTATION=python (but this will use pure-Python parsing and w
- 关于Python自学的方法有哪些?
- 从0到1学Python丨图像平滑方法的两种非线性滤波:中值滤波、双边滤波
- Python编程:查看python环境支持的whl
- 设计模式python版(3)-工厂方法模式
- 为什么我自学了六个月Python,投简历一点回应都没有
- 【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
- Python使用技巧(十三):图像界面设计PySide2与PyQt5的安装与使用测试