paddlepaddle学习笔记
- 默认学习率是四卡的配置,由于此时是单卡训练,学习率需要在默认的学习率上除以四倍。学习率可以通过
-o Optimizer.lr.learning_rate
来改变; - 配置默认是从第10epoch开始做eval,此处为了展现效果,设置了从1epoch开始做eval,可以通过
-o Global.start_eval_epoch=1
来配置; - AI Studio上的共享内存不是非常大,此处需要将
num_workers
设置为1。
使用-o Global.use_ssld=True
表示加载SSLD的预训练权重
MKLDNN是Intel公司基于Intel CPU开发的高性能深度学习预测库。本案例同样支持使用MKLDNN加速模型的预测,并且整个步骤十分简单快速。在上述场景的Python预测命令中,在CPU场景中,直接增加-o Global.enable_mkldnn=True
即可。
在上述场景的Python预测命令中,在GPU场景中,直接增加-o Global.use_tensorrt=True
即可。
PaddleClas 融合已有的知识蒸馏方法 [2,3],提供了一种简单的半监督标签知识蒸馏方案(SSLD,Simple Semi-supervised Label Distillation),
此外,在无标注数据选择的过程中,我们发现使用更加通用的数据,即使不需要严格的数据筛选过程,也可以帮助知识蒸馏任务获得稳定的精度提升,因而提出了SKL-UGI (Symmetrical-KL Unlabeled General Images distillation)知识蒸馏方案。
如果希望直接使用预训练模型,可以在训练的时候,加入参数-o Arch.pretrained=True -o Arch.use_ssld=True
,表示使用基于SSLD的预训练模型,示例如下所示。
===========================
其中模型量化将全精度缩减到定点数减少这种冗余,达到减少模型计算复杂度,提高模型推理性能的目的。 模型量化可以在基本不损失模型的精度的情况下,将 FP32 精度的模型参数转换为 Int8 精度,减小模型参数大小并加速计算,使用量化后的模型在移动端等部署时更具备速度优势。
模型剪枝将 CNN 中不重要的卷积核裁剪掉,减少模型参数量,从而降低模型计算复杂度。=
====================================
# 将inference模型转化为Paddle-Lite优化模型
paddle_lite_opt --model_file=./MobileNetV3_large_x1_0_infer/inference.pdmodel --param_file=./MobileNetV3_large_x1_0_infer/inference.pdiparams --optimize_out=./MobileNetV3_large_x1_0

最终在当前文件夹下生成MobileNetV3_large_x1_0.nb
的文件。
注意:--optimize_out
参数为优化后模型的保存路径,无需加后缀.nb
;--model_file
参数为模型结构信息文件的路径,--param_file
参数为模型权重信息文件的路径,请注意文件名。
此部分使用了 Faiss 作为检索库,其是一个高效的特征检索及聚类的库。此库中集成了多种相似度检索算法,以满足不同的检索场景。在 PaddleClas 中,支持三种检索算法:
- HNSW32: 一种图索引方法。检索精度较高,速度较快。但是特征库只支持添加图像功能,不支持删除图像特征功能。(默认方法)
- IVF:倒排索引检索方法。速度较快,但是精度略低。特征库支持增加、删除图像特功能。
- FLAT: 暴力检索算法。精度最高,但是数据量大时,检索速度较慢。特征库支持增加、删除图像特征功能。
-
-
上述命令会创建一个名为 ppcls 的 Docker 容器,之后再次使用该容器时无需再次运行该命令;
-
参数
--shm-size=8G
将设置容器的共享内存为 8 G,如机器环境允许,建议将该参数设置较大,如64G
; - addleClas 支持使用 DALI 对图像预处理进行加速,由于 DALI 仅支持 GPU 训练,因此需要设置 GPU,且 DALI 需要占用 GPU 显存,需要为 DALI 预留显存。使用 DALI 训练只需在训练配置文件中设置字段
use_dali=True
,或通过以下命令启动训练即可:# 设置用于训练的 GPU 卡号 export CUDA_VISIBLE_DEVICES="0" python ppcls/train.py -c ppcls/configs/ImageNet/ResNet/ResNet50.yaml -o Global.use_dali=True
-
# 设置用于神经网络训练的显存大小,可根据具体情况设置,一般可设置为 0.8 或 0.7,剩余显存则预留 DALI 使用 export FLAGS_fraction_of_gpu_memory_to_use=0.80 python -m paddle.distributed.launch \ --gpus="0,1,2,3" \ ppcls/train.py \ -c ./ppcls/configs/ImageNet/ResNet/ResNet50.yaml \ -o Global.use_dali=True
-
对于 CUDA 11.0:
pip install --extra-index-url https://developer.download.nvidia.com/compute/redist nvidia-dali-cuda110
- 这个选项表示额外地址
混合进度训练
-
超参搜索
ImageNet 作为业界常用的图像分类数据被大家广泛使用,已经总结出一系列经验性的超参,使用这些超参往往能够得到不错的训练精度,而这些经验性的参数在迁移到自己的业务中时,有时效果不佳。有两种常用的超参搜索方法可以用于获得更好的模型超参。
1.1 网格搜索
网格搜索,即穷举搜索,通过查找搜索空间内所有的点,确定最优值。方法简单有效,但当搜索空间较大时,需要消耗大量的计算资源。
1.2 贝叶斯搜索
贝叶斯搜索,即贝叶斯优化,在搜索空间中随机选取超参数点,采用高斯过程,即根据上一个超参数点的结果,更新当前的先验信息,计算前面 n 个超参数点的后验概率分布,得到搜索空间中每一个超参数点的期望均值和方差,其中期望均值越大表示接近最优指标的可能性越大,方差越大表示不确定性越大。通常将选择期望均值大的超参数点称为
exporitation
,选择方差大的超参数点称为exploration
。在贝叶斯优化中通过定义acquisition function
权衡期望均值和方差。贝叶斯搜索认为当前选择的超参数点是处于最大值可能出现的位置。
-
-
posted on 2022-07-29 15:58 shenhshihao 阅读(163) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!