前言:因为两课讲的一个比赛内容(课程里也没分页),所以我把笔记也合在一起。而且也是因为老师讲得很飘,所以我感觉我想记的东西估计不多吧。因为大部分都是新概念,所以我自己也没什么全新的理解,基本都是复制粘贴老师的笔记。
第四第五课主要围绕“柠檬分类竞赛”讲的,这篇笔记主要总结(拷贝)老师的讲课内容。关于完整的代码流程另外立一篇博客。
目录
- 【AI Studio】飞桨图像分类零基础训练营
- 04 – 图像分类竞赛全流程实战
-
- 一、EDA(Exploratory Data Analysis)与数据预处理
-
- 1.EDA(Exploratory Data Analysis)
- 2.数据预处理
-
- ①概念:图像标准化 与 归一化
- ②数据集划分
- 二、Baseline选择
-
- 1.SubClass
- 2. 络结构可视化
- 3.VisualDL模块 – 训练过程可视化
- 4.总结
- 三、竞赛完整流程总结
- 四、常用调参技巧
-
- 1.数据处理部分
-
- ①label shuffling (标签洗牌)
- ②图像扩增
- 2.模型训练部分
-
- ①标签平滑(LSR)
- ②One-Hot编码(独热编码)
- ③优化算法选择
- ④学习率调整策略
- ⑤预训练模型
- ⑥软标签&硬标签
- 五、完整代码&流程分析
- 05 – 飞桨图像分类套件 PaddleClas
-
- 一、PaddleClas 是什么/li>
- 二、PaddleClas使用流程
-
- 1.前置条件
- 2.准备数据集
- 3.模型训练与评估
- 三、图像增广
- 06 – 模型部署
———————————————
【AI Studio】飞桨图像分类零基础训练营
04 – 图像分类竞赛全流程实战
课程项目:图像分类课程(1)
https://aistudio.baidu.com/aistudio/projectdetail/1625783
一、EDA(Exploratory Data Analysis)与数据预处理
1.EDA(Exploratory Data Analysis)
- 探索性数据分析(Exploratory Data Analysis,简称EDA),是指对已有的数据(原始数据)进行分析探索,通过作图、制表、方程拟合、计算特征量等手段探索数据的结构和规律的一种数据分析方法。一般来说,我们最初接触到数据的时候往往是毫无头绪的,不知道如何下手,这时候探索性数据分析就非常有效。
- 对于图像分类任务,我们通常首先应该统计出每个类别的数量,查看训练集的数据分布情况。通过数据分布情况分析赛题,形成解题思路。(洞察数据的本质很重要。)
- 数据分析的一些建议
- 写出一系列你自己做的假设,然后接着做更深入的数据分析;
- 记录自己的数据分析过程,防止出现遗忘;
- 把自己的中间的结果给自己的同行看看,让他们能够给你一些更有拓展性的反馈、或者意见(即open to everybody);
- 可视化分析结果;
- 介绍一个API, 作为常用的读取数据的常用API,使用频率非常高。
- 如果数据集中的标签是用记录的,那就需要用这个API读取解析。
- 标准化代码:输出范围在(-1,1)内,符合正态分布。
- 归一化代码:输出范围在(0,1)内。
②数据集划分
- 读取标签,依旧是八二分,训练集八,验证集二。(代码略)
- 这次把路径读取也写入到类中了,然后继承父类,“一步到位”。
二、Baseline选择
- 看完老师的讲解,对这个标题不是很理解。只能大概猜测就是:基本流程。
理想情况中,模型越大拟合能力越强,图像尺寸越大,保留的信息也越多。在实际情况中模型越复杂训练时间越长,图像输入尺寸越大训练时间也越长。 比赛开始优先使用最简单的模型(如),快速跑完整个训练和预测流程;分类模型的选择需要根据任务复杂度来进行选择,并不是精度越高的模型越适合比赛。 在实际的比赛中我们可以逐步增加图像的尺寸,比如先在64 * 64的尺寸下让模型收敛,进而将模型在128 * 128的尺寸下训练,进而到224 * 224的尺寸情况下,这种方法可以加速模型的收敛速度。
Baseline应遵循以下几点原则:
- 复杂度低,代码结构简单。
- 收敛正确,评价指标()出现相应提升(如/之类的)
- 迭代快速,没有很复杂()的模型结构//图像预处理方法之类的
- 编写正确并简单的测试脚本,能够提交后获得正确的分数
1.SubClass
- 上节课笔记中提到了2种组 方式,下面详细介绍一下专业术语的说法。
模型组 方式
- 对于组 方式,飞桨框架统一支持 或 的方式进行模型的组建。我们根据实际的使用场景,来选择最合适的组 方式。
- 如针对顺序的线性 络结构我们可以直接使用 ,相比于 , 可以快速的完成组 。
- 如果是一些比较复杂的 络结构,我们可以使用 定义的方式来进行模型代码编写,在中进行 的声明,在 中使用声明的 变量进行前向计算。通过这种方式,我们可以组建更灵活的 络结构。
- 第三节课笔记中的第2个线性模型例子就是使用 方法,打包几层 络直接当模型。
- 注意!! 方法有一个特点,模型封装时和 方法不太一样。
# 构建模型。linear=paddle.nn.Sequential(paddle.nn.Flatten(),#将[1,28,28]形状的图片数据改变形状为[1,784]paddle.nn.Linear(784,10))# 模型封装model = paddle.Model(linear()) !!会 错!!model = paddle.Model(linear) # 不会 错
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!