问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

PyTorch深度学习代码框架常用方法汇总

创作时间:
作者:
@小白创作中心

PyTorch深度学习代码框架常用方法汇总

引用
CSDN
1.
https://blog.csdn.net/m0_51870122/article/details/135610254

在深度学习项目中,使用PyTorch框架时经常会遇到一些常用的方法和技巧。本文总结了一些在PyTorch深度学习代码框架中常用的方法,包括命令行参数解析、GPU训练、学习率调度、参数管理等,希望能帮助读者更好地理解和使用PyTorch。

argparse.ArgumentParser()

argparse是Python用于解析命令行参数的标准模块,详细信息可以参考官方文档

  1. 导入argparse模块:import argparse
  2. 创建一个解析对象:parser = argparse.ArgumentParser()
  3. 向解析对象中添加要关注的命令行参数和选项:parser.add_argument()

部分参数解释:

  • metavar:当ArgumentParser生成帮助消息时,它需要用某种方式来引用每个预期的参数。默认情况下,ArgumentParser对象使用dest值作为每个对象的"名称"。默认情况下,对于位置参数,dest值将被直接使用,而对于可选参数,dest值将被转换为大写形式。因此,一个位置参数dest='bar'的引用形式将为bar。一个带有单独命令行参数的可选参数--foo的引用形式将为FOO。可以使用metavar来指定一个替代名称。

  • choices:某些命令行参数应当从一组受限的值中选择。这可以通过将一个序列对象作为choices关键字参数传给add_argument()来处理。当执行命令行解析时,参数值将被检查,如果参数不是可接受的值之一,就将显示错误消息。

  1. 调用parse_args()进行解析:parser.parse_args()

字符串函数-strip()

strip()函数用于移除字符串头尾指定的字符(默认为空格)或字符序列。注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

使用GPU进行训练的几种方法

  1. os.environ['CUDA_VISIBLE_DEVICES']:使用指定的GPU及GPU显存,是设定程序对哪几张显卡可视。需要放在.py文件的开头。

  2. 使用model.to(device)

import torch.nn as nn
import torch.optim as optim

# 定义模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        # ...

    def forward(self, x):
        # ...

model = Net()
# 将模型和数据加载到GPU中
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model.to(device)
data = data.to(device)
# 定义优化器和损失函数
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.001)
  1. 使用torch.cuda.set_device("cuda:0")
import torch

torch.cuda.set_device("cuda:0")

model.cuda()

data = data.cuda()

torch.optim.lr_scheduler

用于在训练过程中修改学习率(learning_rate)。示例:

optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
scheduler = ExponentialLR(optimizer, gamma=0.9)
for epoch in range(20):
    for input, target in dataset:
        optimizer.zero_grad()
        output = model(input)
        loss = loss_fn(output, target)
        loss.backward()
        optimizer.step()
    scheduler.step()

CLASS torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1, verbose=False)

当epoch数达到milestones中的一个时,衰减每个参数组的学习率。注意,这种衰减可以与其他方式同时进行。当last_epoch=-1时,设置初始lr为lr。

nn.Parameter()

用于把普通的tensor转换为可学习的tensor。

super()和 __ init __()

super(FasterRCNN, self).__init__(backbone, rpn, roi_heads, transform)

super()用来调用父类(基类)的方法,__init__()是类的构造方法,super().__init__()就是调用父类的init方法,同样可以使用super()去调用父类的其他方法。

train_iter = iter(train_loader),data, _ = next(train_iter)

iter()函数用来生成迭代器,即通过iter()函数获取这些可迭代对象的迭代器,实际上就是调用了可迭代对象的__iter__方法。

next()得到迭代对象的值,并且将迭代对象指向下一个值。

直接调用self()

比如:results = self(**data, mode=mode)

在PyTorch的nn.Module实现中,__call__()方法中直接调用了forward()方法,所以一般看到self()其实就是在运行forward方法了。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号