1. 框架介绍
Easy-Classification是一个应用于分类任务的深度学习框架,它集成了众多成熟的分类神经网络模型,可帮助使用者简单快速的构建分类训练任务。
1.1 框架功能
1.1.1 数据加载
- 文件夹形式
- 其它自定义形式,在项目应用中,参考案例编写DataSet自定义加载。如基于配置文件,csv,路径解析等。
1.1.2 扩展网络
本框架扩展支持如下网络模型,可在classification_model_enum.py枚举类中查看具体的model。
1.1.3 优化器
- Adam
- SGD
- AdaBelief
- AdamW
1.1.4 学习率衰减
- ReduceLROnPlateau
- StepLR
- MultiStepLR
- SGDR
1.1.5 损失函数
- 直接调用PyTorch相关的损失函数
- 交叉熵
- Focalloss
1.1.6 其他
- Metric(acc, F1)
- 训练结果acc,loss过程图片保存
- 交叉验证
- 梯度裁剪
- Earlystop
- weightdecay
- 冻结/解冻 除最后的全连接层的特征层
1.2 框架设计
Easy-Classification是一个简单轻巧的分类框架,目前版本主要包括两大模块,框架通用模块和项目应用模块。为方便用户快速体验,框架中目前包括简单手写数字识别和验证码识别两个示例项目。
1.2.1 通用模块设计
Easy-Classification通用模块整体结构如下:
通用模块核心类/文件介绍说明:
目录 | 子项 | 功能说明 | 扩展说明 |
config | 框架基础配置目录 | ||
weight | 预训练权重模型存储目录 | 各种神经网络的模型文件,下载后存储在该目录下 | |
classification_model_enum.py | 列举出当前分类框架,目前支持的分类神经网络模型。 枚举中的神经网络名称,与配置文件中的名称一样,表示加载对应的网络模型。 |
后续新增网络时,需在该枚举类中注入 | |
project | 分类框架下的项目应用模块,详细使用参考后续项目应用模块。 | 分类项目目录名称如:验证码识别,简单手写数字识别 | |
universe | 框架通用模块主目录。 | 后续通用的功能,均可放在该目录下。 | |
data_load | 基础数据加载类 | 加载训练数据,验证数据,预测数据等 | |
data_load_service.py | 基于配置文件,加载配置路径下的基础数据,返回对应的张量信息。 不同的分类任务,用户构建DataSet模式不同,该模块提供函数,接收用户构建的DataSet对象。做统一数据加载处理。 |
目前支持目录模式加载。 | |
normalize_adapter.py | 归一化配置类 | 其他新增网络的归一化参数,可配置在此类中。 | |
model | 定义目前框架中,支持的所有分类网络模型。 | 新增网络放入到model_category目录下。 | |
model_service.py | 分类网络模型的对外暴露类,基于配置文件,可指定具体使用哪个分类网络,项目应用时,只需调用moel_service。 moel_service.py:代理者的角色。类似于java中的代理模式。 |
新增的分类网络,要注入到moel_service.py中,对所有分类网络的统一拦截,加日志等功能可在model_service中实现。 | |
runner_config | 训练配置的目录,定义训练过程中的一些配置信息。 | 定义如优化器,学习率调整,损失函数等。 深度学习运行前,配置相关的模块均可放在该目录下。 |
|
optimizer_adapter.py | 优化器适配类,根据配置文件,可返回一个具体的优化器。 | 常用优化器如:Adam,AdamW,SGD,AdaBelief,Ranger | |
loss_function_adapter.py | 自定义损失函数适配类,可基于配置文件,返回一个具体的损失函数。 | 损失函数也可使用 PyTorch中提供的。 | |
scheduler_adapter.py |
学习率调整适配类,可基于配置文件,返回具体的调整类。 | 扩展支持ReduceLROnPlateau,StepLR,MultiStepLR, SGDR | |
utils | utils.py | 常用的工具函数,如加载文件,全连接处理等 | 一些项目通用的工具类函数,如保存acc,loss等记录。 |
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/293404.html