pytorch模型训练函数整理——train.py

本文详细介绍了PyTorch中模型训练的关键步骤,包括设备分配、数据加载、RMSprop优化器设置、二分类损失函数BCEWithLogitsLoss的使用,以及训练过程中的梯度管理,如zero_grad、backward和step的调用。同时,提到了模型参数的保存与训练/评估模式的切换。
摘要由CSDN通过智能技术生成

一、模型训练——train.py

train.py: 设置硬件-->拷贝网络框架-->指定训练集-->划分训练集-->初始化优化器、设置损失函数-->初始化进度条,以epochs循环训练
epochs循环内容:开启训练模式-->根据batch_size大小开始训练
batch_size循环内容:梯度清零-->数据拷贝进硬件-->使用网络框架预测数据的结果-->计算loss,如果是最优loss则文件保存参数-->反向传播计算梯度-->更新参数

1.1 分配硬件设备——torch.device

tips:

  1. 用处:分配到的设备的对象,包含一个设备类型('cpu’或’cuda’设备类型)和可选的设备的序号。
  2. 检查cuda是否就绪,返回值为布尔类型
torch.cuda.is_available()

选择cuda或cpu设备,将网络模型net装载入device中

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
//模型装载
net.to(device=device)

1.2 原始数据划分——torch.utils.data.DataLoader

tips:

  1. 作用: 对数据进行 batch 的划分。在训练模型时使用到此函数,用来把训练数据分成多个小组 ,此函数 每次抛出一组数据 。直至把所有的数据都抛出。
  2. 主要参数
torch.utils.data.DataLoader(dataset= ,batch_size= ,shuffle= )
名称类型含义
dataset原始数据的输入
batch_sizeint批训练数据量的大小
shufflebool每次迭代训练时是否将数据的顺序打乱,默认设置是False

1.3 RMSprop初始化——torch.optim.RMSprop()

tips:

  1. 主要参数
torch.optim.RMSprop(params,
                    lr=,
                    alpha=,
                    eps=,
                    weight_decay=,
                    momentum=,
                    centered=)
参数名作用
params需要被更新的可学习参数
lr学习率
alpha平滑常数
eps加在分母上防止除0
weight_decay权重衰减,L2正则化系数
momentum动量,帮助模型跳出局部最优解
centered如果为真,计算居中的RMSProp,梯度由其方差估计归一化

1.4 二分类损失函数——nn.BCEWithLogitsLoss()

tips:

  1. 在BCE的基础上增加sigmoid()处理
  2. 基本用法:
criterion =nn.BCEWithLogitsLoss() #设置具体的损失函数算法
loss = criterion(pred, label) #放入具体的结果进行计算
参数名含义
pred模型预测结果
label实际标签

1.5 设置训练/评估模式——model.train()和model.eval()

【Pytorch】model.train() 和 model.eval() 原理与用法

tips:

  1. 用法:如果模型中有BN层(Batch Normalization)和 Dropout层 ,需要在训练开始之前写上 model.trian() ,在测试时写上 model.eval()
  2. 作用:
    1)model.train() 是保证 BN 层用每一批数据的均值和方差
    2) model.eval() 是保证 BN 用全部训练数据的均值和方差;

1.6 模型参数保存——torch.save()和model.state_dict()

tips:

  1. model.state_dict() 作用:获取模型中的所有参数,包括可学习参数和不可学习参数,其返回值是一个有序字典 OrderedDict。
  2. torch.save() 作用:保存模型等相关参数
  3. 用法1:保存整个模型(不推荐)
torch.save(model,'net.pth')
  1. 用法2:保存加载模型的参数(推荐,速度快,占内存少)
torch.save(model.state_dict(),'net_params.pth')

1.7 关于optimizer.zero_grad(),loss.backward()和optimizer.step()

理解optimizer.zero_grad(), loss.backward(), optimizer.step()的作用及原理

tips:

  1. 用法:在遍历epochs的过程中依次用到
  2. 作用:先将梯度归零(optimizer.zero_grad()),然后反向传播计算得到每个参数的梯度值(loss.backward()),最后通过梯度下降执行一步参数更新(optimizer.step())

1.8 梯度清零/初始化——optimizer.zero_grad()

tips:

  1. 作用:清除优化器关于所有参数的累计梯度值,初始化为0
  2. 用法:在每轮batch中设置optimizer.zero_grad() 。因为训练的过程通常使用mini-batch方法,所以如果不将梯度清零的话,梯度会与上一个batch的数据相关,因此该函数要写在反向传播和梯度下降之前。

1.9 反向传播——loss.backward()

tips:

  1. 作用:实现反向传播,autograd包会根据tensor进行过的数学运算来自动计算其对应的梯度
  2. 用法:loss.backward()要写在optimizer.step()之前。

1.10 更新参数——optimizer.step()

tips:

  1. 作用:执行一次优化步骤,通过梯度下降法来更新参数的值。
  2. 用法:因为梯度下降是基于梯度的,所以在执行optimizer.step()函数前应先执行loss.backward()函数来计算梯度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值