5 Pytorch小白从零学教程:只生成张量基础之张量的定义与构造
在上一篇文章中,我们讨论了如何配置环境以便顺利使用 PyTorch 进行深度学习的开发。现在,我们要深入了解 PyTorch 中的核心概念之一:张量(Tensor)。这一篇将集中讲解张量的定义和构造。
什么是张量
在计算机科学和深度学习中,张量是用于存储数据的基本数据结构。可以把它视为一个多维的数组。不同于常规的 Python 数据结构,张量能有效地进行计算,尤其在 GPU(图形处理单元)上。
张量的维度
- 标量(0维张量): 单个值,例如 。
- 向量(1维张量): 一维数组,例如 。
- 矩阵(2维张量): 二维数组,例如 。
- 高维张量: 维度高于2的数组,例如一个3D数组可以表示为 。
张量的构造
在 PyTorch 中,构造张量的方法非常灵活,下面将介绍几种常见的构造方式。
1. 从列表或数组构造张量
最直接的方式是使用 torch.tensor
函数来从已有的 Python 列表或 NumPy 数组中构造张量。
import torch
# 从列表构造张量
list_tensor = torch.tensor([1, 2, 3, 4])
print(list_tensor) # 输出: tensor([1, 2, 3, 4])
# 从多维列表构造张量
matrix_tensor = torch.tensor([[1, 2], [3, 4]])
print(matrix_tensor) # 输出: tensor([[1, 2], [3, 4]])
2. 使用 PyTorch 提供的构造函数
PyTorch 提供了一些特定用途的张量构造函数,例如:
torch.zeros
:构建全为零的张量torch.ones
:构建全为一的张量torch.empty
:构建未初始化的张量torch.arange
:构建一个指定范围的均匀间隔的一维张量torch.linspace
:构建一个指定起始点和结束点的均匀分布的一维张量
# 构建全为零的二维张量
zero_tensor = torch.zeros((2, 3))
print(zero_tensor)
# 构建全为一的张量
ones_tensor = torch.ones((3, 2))
print(ones_tensor)
# 构建一个从0到4的张量,步长为1
arange_tensor = torch.arange(0, 5)
print(arange_tensor) # 输出: tensor([0, 1, 2, 3, 4])
# 构建一个从0到1的五个均匀分布的点
linspace_tensor = torch.linspace(0, 1, steps=5)
print(linspace_tensor) # 输出: tensor([0.0000, 0.2500, 0.5000, 0.7500, 1.0000])
3. 指定数据类型和设备
创建张量的时候,可以指定数据类型和设备(CPU或GPU)。例如:
# 创建一个浮点类型的张量
float_tensor = torch.tensor([1, 2, 3], dtype=torch.float32)
print(float_tensor)
# 将张量移动到GPU
if torch.cuda.is_available():
gpu_tensor = float_tensor.to('cuda')
print(gpu_tensor)
4. 随机生成张量
在深度学习中,常常需要随机初始化张量。PyTorch 也提供了方便的方法。
# 创建一个随机张量
random_tensor = torch.rand((2, 3))
print(random_tensor) # 输出一个2x3的随机张量
# 创建一个符合正态分布的张量
normal_tensor = torch.randn((2, 3))
print(normal_tensor) # 输出一个2x3的标准正态分布张量
小结
在这一部分的教程中,我们介绍了 PyTorch 中张量的定义及如何构造张量。掌握张量的构造是学习深度学习的基础,因为几乎所有的计算都需要使用张量。了解不同的构造方法,让你在未来的工作中能灵活处理数据。
下一篇文章中,我们将探讨张量的基本操作,包括如何对张量进行变换和计算,为后续在 PyTorch 中进行更复杂的操作做好准备。
希望你们能在学习的过程中,积极动手实践,巩固所学的知识!