首页 飞桨领航团 帖子详情
百度飞桨学习笔记之深度学习模型训练和关键参数调优详解
收藏
快速回复
飞桨领航团 文章AI达人创造营 4046 0
百度飞桨学习笔记之深度学习模型训练和关键参数调优详解
收藏
快速回复
飞桨领航团 文章AI达人创造营 4046 0

百度飞桨学习笔记之深度学习模型训练和关键参数调优详解

 

1、深度学习模型训练前置基础

1.1 什么是人工智能?

 

我们追求的智能是什么?

 

生物的行为取决于两件事:后天学习 先天的本能

 

 

飞桨:源于产业实践的开源深度学习的平台

 

 

2、模型的选择

 

从任务类型出发 选择最合适的模型

 

2.1 回归任务

 

示例:人脸关键点检测

 

 

人脸关键点检测任务中,输出为 人脸关键点的数量x2,即每个人脸关键点的横坐标与纵坐标。在模型组网时,主要使用2个模块,分别是Inception模块和空间注意力模块。增加空间注意力模块是为了提高模型效果。

· Inception模块

GoogLeNet是由Inception模块进行组成的,GoogLeNet采用了模块化的结构,因此修改网络结构时非常简单方便。

· 空间注意力模块

· 空间注意力聚焦在“哪里”是最具信息量的部分。计算空间注意力的方法是沿着通道轴应用平均池化和最大池操作,然后将它们连接起来生成一个有效的特征描述符。

 

 

2.2 分类任务

 

CIFAR-10数据集也是分类任务中一个非常经典的数据集,在科研中,常常使用CIFAR数据集评估算法的性能。

 

 

图像分类

 

示例:

基于CIFAR-10数据集实现图像10分类。项目完整代码详见:从论文到代码深入解析带有门控单元的gMLP算法  gMLP中,最核心的部分就是空间选通单元(Spatial Gating Unit,SGU),它的结构如下图所示:

 

2.3 场景任务

 

这里说的场景任务是针对某一个特定的场景开发的深度学习任务,相比于回归和分类任务来说,场景任务的难度更高。这里说的场景任务包括但不限于目标检测、图像分割、文本生成、语音合成、强化学习等。

 

PaddleX模型库(https://paddlex.readthedocs.io/zh_CN/develop/appendix/model_zoo.html )

 

PaddleGAN模型库

(https://gitee.com/paddlepaddle/PaddleGAN/blob/master/docs/zh_CN/apis/apps.md)

 

PaddleOCR模型库

(https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.1/doc/doc_ch/models_list.md)

 

PaddleHub模型库(https://www.paddlepaddle.org.cn/hublist)

 

目标检测

 

示例:基于PaddleX的YOLOv3模型快速实现昆虫检测

(https://aistudio.baidu.com/aistudio/projectdetail/442375)。

 

人像分割

 

基于PaddleX核心分割模型 Deeplabv3+Xcetion65 & HRNet_w18_small_v1 实现人像分割,PaddleX提供了人像分割的预训练模型,可直接使用,当然也可以根据自己的数据做微调。

简单的步骤:

1、下载PaddleX源码:

 !git clone https://gitee.com/PaddlePaddle/PaddleX

 

2、下载预训练模型的代码位于PaddleX/examples/human_segmentation,进入该目录,并下载预训练模型:

 

 %cd PaddleX/examples/human_segmentation

 

 !python pretrain_weights/download_pretrain_weights.py

 

3、对人像视频进行分割处理:

 

 !python video_infer.py --model_dir pretrain_weights/humanseg_mobile_inference --video_path data/test.mp4

 

4、预测结果会保存到output文件夹下的result.avi文件里。

 

 

  

文字识别

 

基于chinese_ocr_db_crnn_mobile实现文字识别,识别图片当中的汉字,该Module是一个超轻量级中文OCR模型,支持直接预测。

 

示例:

 

1、安装文字识别模型以及必要的资源库:

 

 !hub install chinese_ocr_db_crnn_mobile==1.1.2

 

!pip install shapely

!pip install pyclipper

 

2 调用预训练模型进行预测:

 import paddlehub as hubimport cv2

 

ocr = hub.Module(name="chinese_ocr_db_crnn_mobile")

result = ocr.recognize_text(images=[cv2.imread('/home/aistudio/work/OCR/ocrdemo.png')],

                            output_dir='/home/aistudio/work/OCR/ocr_result',

                            visualization=True)

 

 

3、模型训练

仅基于原生Python和Numpy看模型训练基本原理:神经网络梯度下降原理

 

3、1.基于高层API训练模型

通过Model.prepare接口来对训练进行提前的配置准备工作,包括设置模型优化器,Loss计算方法,精度计算方法等。

 

import paddle

 

 # 使用paddle.Model完成模型的封装

model = paddle.Model(Net)

 

 # 为模型训练做准备,设置优化器,损失函数和精度计算方式

model.prepare(optimizer=paddle.optimizer.Adam(parameters=model.parameters()),

loss=paddle.nn.CrossEntropyLoss(),

metrics=paddle.metric.Accuracy())

 

# 调用fit()接口来启动训练过程

 model.fit(train_dataset,

epochs=1,

batch_size=64,

verbose=1)

 

 

加载数据集

......

 

模型封装

以使用paddle.Model完成模型的封装,将网络结构组合成一个可快速使用高层API进行训练和预测的对象。代码如下:

In [ ]

model = paddle.Model(gmlp_vision)

 

训练参数配置

用paddle.Model完成模型的封装后,在训练前,需要对模型进行配置,通过Model.prepare接口来对训练进行提前的配置准备工作,包括设置模型优化器,Loss计算方法,精度计算方法等。

 

callback = paddle.callbacks.VisualDL(log_dir='gMLP_log_dir')

 

def create_optim(parameters):

step_each_epoch = len(trainloader) // 128

lr=paddle.optimizer.lr.CosineAnnealingDecay(learning_rate=0.25,

T_max=step_each_epoch * 120)

 

return paddle.optimizer.Adam(learning_rate=lr,

parameters=parameters,

weight_decay=paddle.regularizer.L2Decay(3e-4))

 

model.prepare(create_optim(model.parameters()), # 优化器

paddle.nn.CrossEntropyLoss(), # 损失函数

paddle.metric.Accuracy(topk=(1, 5))) # 评估指标

 

模型训练

做好模型训练的前期准备工作后,调用fit()接口来启动训练过程,需要指定至少3个关键参数:训练数据集,训练轮次和单次训练数据批次大小。

 

 

model.fit(trainloader,

testloader,

epochs=120,

eval_freq=2,

shuffle=True,

save_dir='gMLP_case1_chk_points/',

save_freq=20,

 batch_size=128,

callbacks=callback, v

erbose=1)

 

 

 

.....

 

3、2 使用PaddleX训练模型

 

YOLOv3模型的训练接口示例,函数内置了piecewise学习率衰减策略和momentum优化器。

model.train(

    num_epochs=270,

    train_dataset=train_dataset,

    train_batch_size=8,

    eval_dataset=eval_dataset,

    learning_rate=0.000125,

    lr_decay_epochs=[210, 240],

    save_dir='output/yolov3_darknet53',

    use_vdl=True)

 

 

4、超参优化

4.1、超参优化的基本概念

参数

参数是机器学习算法的关键,是从训练数据中学习到的,属于模型的一部分。

输入一个值(x),乘以权重,结果就是网络的输出值。权重可以随着网络的训练进行更新,从而找到最佳的值,这样网络就能尝试匹配输出值与目标值。

这里的权重其实就是一种参数。

超参数

模型的超参数指的是模型外部的配置变量,是不能通过训练的进行来估计其取值不同的,且不同的训练任务往往需要不同的超参数。

超参数不同,最终得到的模型也是不同的。

一般来说,超参数有:学习率,迭代次数,网络的层数,每层神经元的个数等等。

常见的超参数有以下三类:

1、网络结构,包括神经元之间的连接关系、层数、每层的神经元数量、激活函数的类型等 .

2、优化参数,包括优化方法、学习率、小批量的样本数量等 .

3、正则化系数

 

4.2.手动调整超参数的四大方法

 

1)使用提前停止来确定训练的迭代次数

 

2)让学习率从高逐渐降低

 

3)宽泛策略

 

4)小批量数据(mini-batch)大小不必最优

 

0
收藏
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户