首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | PyTorch:网红中的顶流明星
02 | NumPy(上):核心数据结构详解
03 | NumPy(下):深度学习中的常用操作
04 | Tensor:PyTorch中最基础的计算单元
05 | Tensor变形记:快速掌握Tensor切分、变形等方法
06 | Torchvision(上):数据读取,训练开始的第一步
07 | Torchvision(中):数据增强,让数据更加多样性
08 | Torchvision(下):其他有趣的功能
09 | 卷积(上):如何用卷积为计算机“开天眼”?
10 | 卷积(下):如何用卷积为计算机“开天眼”?
11 | 损失函数:如何帮助模型学会“自省”?
12 | 计算梯度:网络的前向与反向传播
13 | 优化方法:更新模型参数的方法
14 | 构建网络:一站式实现模型搭建与训练
15 | 可视化工具:如何实现训练的可视化监控?
16|分布式训练:如何加速你的模型训练?
17 | 图像分类(上):图像分类原理与图像分类模型
18 | 图像分类(下):如何构建一个图像分类模型?
19 | 图像分割(上):详解图像分割原理与图像分割模型
20 | 图像分割(下):如何构建一个图像分割模型?
21 | NLP基础(上):详解自然语言处理原理与常用算法
22 | NLP基础(下):详解语言模型与注意力机制
23 | 情感分析:如何使用LSTM进行情感分析?
24 | 文本分类:如何使用BERT构建文本分类模型?
25 | 摘要:如何快速实现自动文摘生成?
当前位置:
首页>>
技术小册>>
PyTorch深度学习实战
小册名称:PyTorch深度学习实战
### 第04章 Tensor:PyTorch中最基础的计算单元 在PyTorch的广阔世界中,Tensor无疑是构建深度学习模型的基石。作为PyTorch的核心数据结构,Tensor提供了一种高效、灵活的方式来存储和操作多维数组,这些多维数组在深度学习算法中扮演着至关重要的角色。本章将深入探索Tensor的基本概念、创建方法、操作技巧及其在PyTorch中的核心地位。 #### 4.1 Tensor概览 Tensor,字面意思为“张量”,在数学和物理学中是一个广泛使用的概念,用于表示标量、向量、矩阵以及它们的高维推广。在PyTorch中,Tensor被设计为多维数组,其形状(shape)由一系列整数表示,每个整数对应一个维度的大小。例如,一个形状为`(3, 4)`的Tensor表示一个二维数组,拥有3行4列。 Tensor不仅存储数据,还包含数据类型(dtype)和是否可求导(requires_grad)等属性。数据类型决定了Tensor中元素的类型(如浮点数、整数等),而是否可求导则决定了PyTorch是否追踪该Tensor上的所有操作,以便后续进行梯度计算,这对于训练神经网络至关重要。 #### 4.2 Tensor的创建 在PyTorch中,创建Tensor的方式多种多样,灵活多变。以下是一些常用的创建Tensor的方法: - **直接创建**:使用`torch.tensor()`函数可以直接从Python列表或NumPy数组创建Tensor。 ```python import torch data = [1, 2, 3, 4] x = torch.tensor(data) print(x) ``` - **指定数据类型**:通过`dtype`参数可以指定Tensor的数据类型。 ```python x_float = torch.tensor(data, dtype=torch.float32) print(x_float.dtype) ``` - **根据形状创建**:`torch.zeros()`, `torch.ones()`, `torch.empty()`, `torch.full()`, `torch.arange()`, `torch.linspace()`等函数可以根据给定的形状和数据类型创建特定内容的Tensor。 ```python zeros = torch.zeros((2, 3)) # 创建2x3的全零Tensor ones = torch.ones((2, 2), dtype=torch.int64) # 创建2x2的全一Tensor,指定数据类型为int64 ``` - **随机Tensor**:`torch.rand()`, `torch.randn()`, `torch.randint()`等函数用于生成随机Tensor,这对于初始化神经网络权重等场景非常有用。 ```python rand_tensor = torch.rand((3, 4)) # 在[0, 1)区间内生成均匀分布的随机Tensor randn_tensor = torch.randn((2, 2)) # 生成标准正态分布的随机Tensor ``` #### 4.3 Tensor的操作 PyTorch提供了丰富的Tensor操作,包括数学运算、索引、切片、形状变换、广播等,这些操作是构建深度学习模型的基础。 - **数学运算**:PyTorch支持逐元素(element-wise)的数学运算,如加法、减法、乘法、除法等,也支持矩阵乘法(使用`torch.matmul()`或`@`操作符)。 ```python a = torch.tensor([1.0, 2.0, 3.0]) b = torch.tensor([4.0, 5.0, 6.0]) c = a + b # 逐元素加法 print(c) A = torch.randn(2, 3) B = torch.randn(3, 2) C = torch.matmul(A, B) # 矩阵乘法 print(C) ``` - **索引与切片**:类似于NumPy,PyTorch的Tensor也支持索引和切片操作,允许我们访问或修改Tensor中的特定元素或子数组。 ```python x = torch.arange(10) print(x[2:5]) # 切片操作 print(x[[1, 3, 5]]) # 使用索引列表访问特定元素 ``` - **形状变换**:`reshape()`, `view()`, `transpose()`, `permute()`等函数允许我们改变Tensor的形状而不改变其数据。 ```python x = torch.arange(1, 7).view(2, 3) # 将一维Tensor重塑为2x3 print(x.transpose(0, 1)) # 交换维度 ``` - **广播机制**:当对形状不同的Tensor进行逐元素操作时,PyTorch会自动应用广播机制来扩展较小Tensor的形状,使其与较大Tensor的形状相匹配。 ```python a = torch.arange(1, 3).view(1, 2) b = torch.arange(1, 5).view(2, 2) c = a + b # 广播机制自动扩展a的形状 print(c) ``` #### 4.4 Tensor与梯度 在深度学习中,计算梯度是优化算法的核心。PyTorch通过`requires_grad`属性来追踪对Tensor的所有操作,以便后续计算梯度。 - **设置`requires_grad`**:当创建一个Tensor时,可以将其`requires_grad`属性设置为`True`,以指示PyTorch记录对该Tensor的所有操作,以便后续进行梯度计算。 ```python x = torch.randn(3, 4, requires_grad=True) ``` - **梯度计算**:完成所有计算后,可以通过调用`.backward()`方法来自动计算所有`requires_grad=True`的Tensor的梯度。这些梯度将累加到这些Tensor的`.grad`属性中。 ```python y = x.sum() # 简单的计算 y.backward() # 计算梯度 print(x.grad) # 查看x的梯度 ``` #### 4.5 Tensor与CUDA 为了加速深度学习模型的训练过程,PyTorch支持将Tensor移动到GPU上进行计算。CUDA是NVIDIA推出的一种并行计算平台和编程模型,能够利用NVIDIA GPU的并行计算能力来加速计算密集型任务。 - **检查CUDA是否可用**:在尝试将Tensor移动到GPU之前,首先需要检查CUDA是否可用。 ```python if torch.cuda.is_available(): device = torch.device("cuda") print(f"CUDA is available. Using device: {device}") else: device = torch.device("cpu") print("CUDA is not available. Using device: cpu") ``` - **Tensor到CUDA的转移**:使用`.to(device)`方法可以将Tensor转移到指定的设备(如CPU或GPU)上。 ```python x = torch.randn(3, 4).to(device) ``` #### 结语 Tensor作为PyTorch中最基础的计算单元,其重要性不言而喻。通过本章的学习,我们掌握了Tensor的基本概念、创建方法、操作技巧以及如何在PyTorch中利用Tensor进行梯度计算和CUDA加速。这些基础知识将为我们后续深入学习PyTorch和构建深度学习模型打下坚实的基础。在未来的章节中,我们将继续探索PyTorch的高级特性,如自动微分、神经网络构建与优化等,以期在深度学习领域取得更加深入的理解和应用。
上一篇:
03 | NumPy(下):深度学习中的常用操作
下一篇:
05 | Tensor变形记:快速掌握Tensor切分、变形等方法
该分类下的相关小册推荐:
深度强化学习--算法原理与金融实践(一)
人工智能原理、技术及应用(上)
推荐系统概念与原理
机器学习训练指南
ChatGPT原理与实战:大型语言模型(上)
玩转ChatGPT:秒变AI提问和追问高手(下)
Midjourney新手攻略
ChatGLM3大模型本地化部署、应用开发与微调(中)
大规模语言模型:从理论到实践(上)
可解释AI实战PyTorch版(上)
AI大模型入门指南
秒懂AI提问:人工智能提升效率