1.Pytorch
PyTorch是一个开源的Python机器学习库,基于Torch库,底层由C++实现,应用于人工智能领域,如计算机视觉和自然语言处理。它最初由Meta Platforms的人工智能研究团队开发,现在属于Linux基金会的一部分。它是在修改后的BSD许可证下发布的自由及开放源代码软件。 尽管Python接口更加完善并且是开发的主要重点,但 PyTorch 也有C++接口。
许多深度学习软件都是基于 PyTorch 构建的,包括特斯拉自动驾驶、Uber的Pyro、Hugging Face的Transformers、 PyTorch Lightning、和Catalyst。
1.1 概述
PyTorch主要有两大特征:
- 类似于NumPy的张量计算,能在 GPU 或 MPS 等硬件加速器上加速;
- 基于带自动微分系统[18][19]的深度神经网络。
PyTorch包括torch.autograd、torch.nn、torch.optim等子模块。
PyTorch包含多种损失函数,包括 MSE(均方误差 = L2 范数)、交叉熵损失和负熵似然损失(对分类器有用)等。
2.PyTorch张量
PyTorch定义了一个名为张量(torch.Tensor) 的类别来存储和操作同构多维矩形数字数组。 PyTorch张量与NumPy数组类似,但也可以在支持 CUDA 的 英伟达 GPU 上运作。 PyTorch 也一直在开发对其他 GPU 平台的支持,例如 AMD 的 ROCm 和 Apple 的Metal Framework。
张量是 PyTorch 中的核心数据抽象,PyTorch 支持各种张量子类型。通常地,一维张量称为向量(vector),二维张量称为矩阵(matrix)。
张量的数据类型包括:
- torch.bool
- torch.int8
- torch.uint8
- torch.int16
- torch.int32
- torch.int64
- torch.half
- torch.float
- torch.double
- torch.bfloat
2.1 PyTorch神经网络
神经网络由对数据执行操作的层/模块组成。 torch.nn 命名空间提供了用户需要的所有构建块来构建自己的神经网络。PyTorch 中的每个模块都对应nn.模块。 神经网络本身是由其他模块(层)组成的模块。这种嵌套结构允许用户轻松构建并管理复杂的架构。神经网络中的许多层都是参数化的,即具有相关的权重以及在训练期间优化的偏差。自动子类化跟踪模型对象中定义的所有字段,并生成所有参数可使用模型或方法访问。
import torch # for all things PyTorch
import torch.nn as nn # for torch.nn.Module, the parent object for PyTorch models
import torch.nn.functional as F # for the activation function
激活函数torch.nn.Module具有封装所有主要内容的对象激活功能,包括 ReLU 及其许多变体、Tanh、 Hardtanh、sigmoid 等。
3. PyTorch模型常见图层类型
线性层
最基本的神经网络层类型是线性或完全连接层。在这个层中,每个输入都会影响每个图层的输出到由图层权重指定的程度。如果 模型有 m 个输入和 n 个输出,权重将是一个 m x n 矩阵。
卷积层
卷积层旨在