【PyTorch】06训练过程

6 PyTorch训练过程

6.1 学习率调整

学习率(learning rate):控制更新的步伐,注意:学习率不宜设置过大,也不宜设置过小

lr初始化:

  1. 设置较小数:0.01、0.001、0.0001
  2. 搜索最大学习率:《Cyclical Learning Rates for Training Neural Networks》

lr调整策略:学习率前期需设置大,后期需设置小

PyTorch 中常用的 lr_scheduler [学习率调整策略]

PyTorch API:Doc —> torch.optim —> How to adjust Learning Rate

【PyTorch】5.1 学习率调整策略

  • _LRScheduler类
    在这里插入图片描述
    基本属性:

    • optimizer:关联的优化器
    • last_epoch:上一个epoch数,这个变量用于指示学习率是否需要调整。当last_epoch符合设定的间隔时就会调整学习率。当设置为-1时,学习率设置为初始值
    • base_lrs:记录初始学习率

    主要方法:

    • step():更新下一个epoch的学习率
    • get_lr():虚函数,计算下一个epoch的学习率
  • optim.lr_scheduler.StepLR()
    在这里插入图片描述
    功能:等间隔调整学习率,调整方式:lr=lr*gamma

    参数说明:

    • optimizer:关联的优化器

    • step_size:调整间隔数

    • gamma:调整系数

    • last_epoch:上一个epoch数,这个变量用于指示学习率是否需要调整。当last_epoch符合设定的间隔时就会调整学习率。当设置为-1时,学习率设置为初始值

  • optim.lr_scheduler.MultiStepLR()
    在这里插入图片描述
    功能:按照给定间隔调整学习率,调整方式: l r = l r ∗ g a m m a lr = lr * gamma lr=lrgamma

    参数说明:

    • optimizer:关联的优化器

    • milestones:自定义设定调整时刻数列表

    • gamma:调整系数

    • last_epoch:上一个epoch数,这个变量用于指示学习率是否需要调整。当last_epoch符合设定的间隔时就会调整学习率。当设置为-1时,学习率设置为初始值

  • optim.lr_scheduler.ExponentialLR()
    在这里插入图片描述
    功能:按照指数衰减调整学习率,调整方式: l r = l r ∗ g a m m a e p o c h lr = lr * gamm{a^{epoch}} lr=lrgammaepoch

    参数说明:

    • optimizer:关联的优化器
    • gamma:指数的底
    • last_epoch:上一个epoch数,这个变量用于指示学习率是否需要调整。当last_epoch符合设定的间隔时就会调整学习率。当设置为-1时,学习率设置为初始值
  • optim.lr_scheduler.ConsineAnnealingLR()
    在这里插入图片描述
    功能:按照余弦周期调整学习率,调整方式: η t = η min ⁡ + 1 2 ( η max ⁡ − η min ⁡ ) ( 1 + cos ⁡ ( T c u r T max ⁡ π ) ) {\eta _t} = {\eta _{\min }} + \frac{1}{2}\left( {{\eta _{\max }} - {\eta _{\min }}} \right)\left( {1 + \cos \left( {\frac{{{T_{cur}}}}{{{T_{\max }}}}\pi } \right)} \right) ηt=ηmin+21(ηmaxηmin)(1+cos(TmaxTcurπ))

    参数说明:

    • optimizer:关联的优化器
    • T_max:下降周期
    • eta_min:学习率下限
    • last_epoch:上一个epoch数,这个变量用于指示学习率是否需要调整。当last_epoch符合设定的间隔时就会调整学习率。当设置为-1时,学习率设置为初始值
  • optim.lr_scheduler.ReduceLROnPlateau()
    image-20220518133932548
    功能:监控指标,当指标不再变化则自适应调整【比较实用】

    参数说明:

    • optimizer:关联的优化器
    • mode:min/max两种模式,min模式:监控loss,max模式:监控分类准确率accuracy
    • factor:调整系数
    • patience:“耐心”,接受连续几次不变化,则调整学习率
    • verbose:是否打印日志
    • cooldown:“冷却时间”,停止监控一段时间
    • min_lr:学习率下限
    • eps:学习率衰减最小值
  • optim.lr_scheduler.LambdaLR()
    在这里插入图片描述
    功能:自定义调整策略【比较实用,灵活度高】

    参数说明:

    • optimizer:关联的优化器
    • lr_lambda:function or list
    • last_epoch:上一个epoch数,这个变量用于指示学习率是否需要调整。当last_epoch符合设定的间隔时就会调整学习率。当设置为-1时,学习率设置为初始值

在这里插入图片描述

6.2 TensorBoard可视化

TensorBoard:TensorFlow中强大的可视化工具,支持标量、图像、文本、音频、视频和Embedding等多种数据可视化

安装:

  • 运行pip install tensorboard命令
  • 若报错ModuleNotFoundError:No module named “past”,则运行pip install future命令

PyTorch中TensorBoard与torchsummary的使用详解

可视化:

  1. 运行tensorboard --logdir=./runs命令
  2. 点击http://localhost:6006/出现终端页面可视化

【PyTorch】5.2 TensorBoard简介与安装

在这里插入图片描述

6.2.1 曲线可视化

【PyTorch】5.3 TensorBoard使用(一)

  • SummaryWriter类
    在这里插入图片描述
    功能:提供创建event file的高级接口

    基本属性:

    • log_dir:event file输出文件夹,默认会在当前文件夹下创建一个runs文件夹,通常需设置此属性,方便管理
    • comment:不指定log_dir时,文件夹后缀
    • filename_suffix:event file文件名后缀

    调用方法:from torch.utils.tensorboard import SummaryWriter

    创建接口:writer = SummaryWriter(comment=‘test_comment’, filename_suffix=“test_suffix”)

  • add_scalar()
    image-20220518145105767
    功能:记录单个曲线的标量

    参数说明:

    • tag:图像的标签名,图的唯一标识
    • scalar_value:记录单个曲线的标量,即y轴
    • global_step:x轴
  • add_scalars()
    在这里插入图片描述
    功能:记录多个曲线的标量

    参数说明:

    • main_tag:图像的标签名,图的唯一标识
    • tag_scalar_dict:字典形式记录多个曲线,其key是变量的tag,value是变量的值
    • global_step:x轴
  • add_histogram()
    image-20220518150803672
    功能:统计直方图与多分位数折线图

    参数说明:

    • tag:图像的标签名,图的唯一标识
    • values:统计的参数
    • global_step:y轴
    • bins:取直方图的bins设置模式,通常默认tensorflow

6.2.2 图像可视化

【PyTorch】5.3 TensorBoard使用(二)

  • add_image()
    image-20220518154854164
    功能:记录图像,可实现卷积核与特征图可视化

    参数说明:

    • tag:图像的标签名,图的唯一标识
    • img_tensor:图像数据,注意尺度
    • global_step:x轴
    • dataformats:数据形式,CHW,HWC,HW
  • torchvision.utils.make_grid()
    image-20220518163025226
    功能:制作网格图像

    参数说明:

    • tensor:图像数据,B*C*H*W形式
    • nrow:行数(列数自动计算)
    • padding:图像间距(像素单位)
    • normalize:是否将像素值标准化
    • range:标准化范围
    • scale_each:是否单张图维度标准化
    • pad_value:padding的像素值
  • add_graph()
    image-20220519162143760
    功能:可视化模型计算图

    参数说明:

    • model:模型,必须是nn.Module
    • input_to_model:输出给模型的数据
    • verbose:是否打印计算图结构信息

6.3 torchsummary可视化

torchsummary查看模型结构信息(网络层形状和参数等)

安装:

  • 运行pip install torchsummary命令
  • torchsummary.summary()
    image-20220519173229195
    功能:查看模型结构信息,便于调试

    参数说明:

    • model:pytorch模型
    • input_size:模型输入size=(channels, H, W)
    • batch_size:batch size
    • device:“cuda” or “cpu”

6.4 Hook函数与CAM可视化

6.4.1 Hook函数

Hook函数机制不改变主体,实现额外功能

对应到在PyTorch中,主体就是forward和backward,而额外功能就是对模型的变量进行操作,如提取特征图,提取非叶子结点(张量)的梯度和修改张量梯度等

Hook出现与PyTorch运算机制有关,PyTorch在每一次运算结束后,会将中间变量释放,以节省内存空间,这些会被释放的变量包括非叶子结点(张量),卷积层的输出特征图等

PyTorch的Hook及其在Grad-CAM中的应用

在这里插入图片描述

  • Tensor.register_hook()
    image-20220520142239125
    功能:对张量Tensor注册一个反向传播hook函数,捕获非叶子结点(张量)的梯度

    参数说明:仅有一个输入参数

    • grad:张量的梯度
  • Module.register_forward_hook()
    image-20220520142337078
    功能:注册module的前向传播hook函数,获取卷积输出特征图

    参数说明:

    • module:当前网络层
    • input:当前网络层输入数据
    • output:当前网络层输出数据
  • Module.register_forward_pre_hook()
    在这里插入图片描述
    功能:注册module前向传播前的hook函数

    参数说明:

    • module:当前网络层
    • input:当前网络层输入数据
  • Module.register_backward_hook()
    在这里插入图片描述
    功能:注册module的反向传播hook函数

    参数说明:

    • module:当前网络层
    • grad_input:当前网络层输入梯度数据
    • grad_output:当前网络层输出梯度数据

6.4.2 CAM可视化

CAM:类激活图,class activation map

在这里插入图片描述

Grad-CAM:CAM改进版,利用梯度作为特征图权重

image-20220520150256369

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值