pytorch相关知识点总结

本文详细介绍了PyTorch中的关键组件,包括自动求导库torch.autograd、优化器torch.optim(以Adam为例)、图像预处理torchvision.transforms、神经网络构建模块torch.nn及torch.nn.functional。此外,还探讨了卷积操作nn.Conv2d、全连接层nn.Linear、归一化处理nn.BatchNorm2d以及损失函数nn.MSELoss。文章深入浅出地阐述了这些概念在深度学习中的作用和使用方法。
1.torch.autograd

Autograd是python中的自动求导库
PyTorch 作为一个深度学习平台,在深度学习任务中比 NumPy 这个科学计算库强在哪里呢?一是 PyTorch 提供了自动求导机制,二是对 GPU 的支持。由此可见,自动求导 (autograd) 是 PyTorch,乃至其他大部分深度学习框架中的重要组成部分。

2.torch.optim

转自知乎:
https://zhuanlan.zhihu.com/p/349072157

torch.optim模块中,包含了大部分现在已有的流行的优化方法。
使用:

optimizer = optim.Adam(model.parameters())

创建一个optimizer对象,这个对象会保存当前的状态,并根据梯度更新参数。
作用:

根据网络反向传播的梯度信息来更新网络的参数,以起到降低loss函数计算值,

从优化器的作用出发,要使得优化器能够起作用,需要两个主要东西:

(1)优化器需要知道当前使用的是什么模型的参数空间。因此在训练文件中,正式开始训练前,需要把网络的参数放到优化器中。比如:optimizer = optim.Adam(model.parameters())。
(2)需要知道反向传播的梯度信息。
使用流程:

首先,在创建优化器对象的时候,要传入网络模型的参数,并设置学习率等优化方法的参数。然后使用函数zero_grad将梯度置为零。接着调用函数backward来进行反向传播计算梯度。最后使用优化器的step函数来更新参数。

optimizer = optim.Adam(model.parameters())
for epoch in range(num_epoches):
	train_loss=0
	for step,(seq, label) in enumerate(data_loader):
		# 损失函数
		loss = criterion(model(seq), label.to(device))
	# 将梯度清零
	opimizer.zero_grad()
	# 损失函数backward进行反向传播梯度的计算
	loss.backward()
	train_loss += loss.item()
	# 使用优化器的step函数来更新参数
	optimizer.step()

优化算法主要分为两大类:
(1)SGD及其改进(加Momentum)
(2)逐参数适应学习率方法,包括AdaGrad,RMSProp,Adam等

3.torch.optim.adam优化算法

参数

class Adam(Optimizer):
   #Implements Adam algorithm.  
    
    def __init__(self, params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,
                 weight_decay=0, amsgrad=False):

params(iterable)待优化参数的iterable或者是定义了参数组的dict

lr (float,可选):学习率(步长因子),默认le-3=0.001,控制了权重的更新比率.较大的值(如0.3)在学习率更新前会有更快地初始学习,而较小的值如le-5会令训练收敛到更好的性能。

betas=[beta1,beta2],可选:用于计算梯度以及梯度平方的运行平均值的系数,默认为[0.9,0.999],beta1是一阶矩阵的指数衰减率,beta2是二阶矩阵的指数衰减率,该超参数在稀疏梯度(如在NLP或计算机视觉任务中)应该设置为接近1的数。

eps,epsion:该参数是非常小的数,为了增加数值计算的稳定性而加到分母里的项,默认le-8,为了防止在实现中除以零;

weight_decay,可选:权重衰减,L2乘法,默认0

特点:
1、结合了adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点;
2、对内存需求较小
3、为不同的参数计算不同的自适应学习率
4、也适用于大多非凸优化–适用于大数据集和高维空间。

4.torch.nn.Conv2d()

在这里插入图片描述

5.torchvision.transforms

是pytorch中的图像预处理包(图像变换),一般用Compose把多个步骤整合到一起。

6.torch.nn

Pytorch提供了几个设计得非常棒的模块和类,比如 torch.nn,torch.optim,Dataset 以及 DataLoader,来帮助程序员设计和训练神经网络。
nn是Neural Network的简称,帮助程序员方便执行如下的与神经网络相关的行为:
(1)创建神经网络
(2)训练神经网络
(3)保存神经网络
(4)恢复神经网络

7.torch.nn.functional
nn.functional概述

nn.functional定义了创建神经网络所需要的一些常见的处理函数。如没有激活函数的神经元,各种激活函数等。

nn.functional函数分类

nn.functional包括神经网络前向和后向处理所需要到的常见函数。
(1)神经元处理函数
(2)激活函数

激活函数的案例

(1)relu案例

# nn.functional.relu( )
print(y_output)
out = nn.functional.relu(y_output)
print(out
### PyTorch 核心概念与重要知识点总结 #### 一、PyTorch简介 PyTorch是由Facebook的人工智能研究团队开发的一个开源机器学习框架。该框架凭借其灵活性、高效性和易用性,在学术界和工业界都得到了广泛应用[^1]。 #### 二、核心特性 - **动态图机制**:区别于静态图,PyTorch采用即时执行模式(Eager Execution),允许开发者更方便地调试代码并构建复杂的网络结构。 - **自动求导功能**:内置Autograd模块可以自动追踪所有操作,并据此计算梯度,简化了反向传播过程中的手动编码工作。 - **丰富的工具库支持**:除了基础的神经网络层外,还提供了诸如优化器、损失函数等多种实用组件;另外有专门针对自然语言处理(NLP)以及计算机视觉(CV)领域的子包torchtext和torchvision等。 #### 三、主要组成部分 ##### (一) Tensor(张量) Tensor是PyTorch中最基本的数据表示形式,类似于NumPy数组但具有GPU加速能力。存在两种创建方式——`torch.tensor()`方法用于实例化新对象而`torch.Tensor`则是类名不建议直接用来初始化[^3]。 ```python import torch # 使用tensor()函数创建一个二维浮点型随机矩阵 data = [[1., -0.5], [-2., 3]] x_data = torch.tensor(data) print(x_data) ``` ##### (二) Autograd(自动微分) 每当完成一次前向运算后如果设置了requires_grad=True属性,则会记录下所有的操作以便后续能够正确地执行链式法则来获取参数更新所需的偏导数信息。 ```python x = torch.ones(2, 2, requires_grad=True) y = x + 2 z = y * y * 3 out = z.mean() out.backward() print(x.grad) ``` ##### (三) Optim(优化算法封装) 提供了一系列常用的最优化策略比如SGD、Adam等等可以直接应用于模型训练过程中调整权重使得代价最小化。 ```python optimizer = optim.Adam([var_x], lr=learning_rate) for t in range(num_epochs): optimizer.zero_grad() loss_fn(output, target).backward() optimizer.step() ``` ##### (四) nn.Module(神经网络容器) 作为高层API接口之一nn.Module被设计成继承式的基类供用户自定义各种类型的Layer或整个Network架构。 ```python class Net(nn.Module): def __init__(self): super().__init__() self.conv1 = nn.Conv2d(in_channels=1,out_channels=6,kernel_size=(5,5)) ... net = Net().cuda() ``` ##### (五) DataLoader & Dataset 为了更好地管理批量数据读取流程官方给出了Dataset抽象基类配合DataLoader迭代器实现多线程异步加载提高效率降低内存占用率[^4]。 ```python from torchvision.datasets import MNIST from torch.utils.data.dataloader import DataLoader train_dataset = MNIST(root='./mnist/', train=True, transform=None, download=False) train_loader = DataLoader(dataset=train_dataset,batch_size=batch_size,num_workers=num_workers,pin_memory=True) ``` #### 四、应用场景举例 在计算机视觉方面,利用卷积神经网路(Convolutional Neural Networks,CNNs),可以通过迁移学习快速搭建高效的图片识别系统;而在NLP领域则更多依赖循环神经网络(Recurrent Neural Network,RNN)及其变体LSTM/GRU来进行序列建模任务如文本分类、情感分析等[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值