5 PyTorch 张量操作教程

5 PyTorch 张量操作教程

在本小节中,我们将深入探索 PyTorch 中的张量操作。张量是 PyTorch 中的核心数据结构,类似于 NumPy 的数组,但具有更强大的功能,能够利用 GPU 加速计算。我们将从基本的张量创建开始,逐步介绍常用的张量操作。

1. 创建张量

1.1 从列表创建张量

可以使用 torch.tensor() 从 Python 列表创建张量。

1
2
3
4
5
6
7
8
9
import torch

# 从列表创建一维张量
a = torch.tensor([1, 2, 3])
print(a) # 输出: tensor([1, 2, 3])

# 从嵌套列表创建二维张量
b = torch.tensor([[1, 2], [3, 4]])
print(b) # 输出: tensor([[1, 2], [3, 4]])

1.2 使用内置函数创建张量

PyTorch 提供了多种内置函数来创建张量:

  • torch.zeros(): 创建全零张量
  • torch.ones(): 创建全一张量
  • torch.arange(): 创建等间隔的张量
  • torch.rand(): 创建随机张量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建全零张量
zero_tensor = torch.zeros((2, 3))
print(zero_tensor) # 输出: tensor([[0., 0., 0.], [0., 0., 0.]])

# 创建全一张量
one_tensor = torch.ones((2, 3))
print(one_tensor) # 输出: tensor([[1., 1., 1.], [1., 1., 1.]])

# 创建等间隔张量
arange_tensor = torch.arange(0, 10, step=2) # 从0到8,步伐为2
print(arange_tensor) # 输出: tensor([0, 2, 4, 6, 8])

# 创建随机张量
random_tensor = torch.rand((2, 3)) # 创建2x3的随机张量
print(random_tensor) # 输出类似: tensor([[0.3424, 0.1342, 0.4393], [0.2938, 0.0294, 0.3847]])

2. 张量的属性

2.1 张量的维度、形状和数据类型

张量有多个属性,可以获取它们的维度、形状和数据类型。

1
2
3
4
tensor_example = torch.tensor([[1, 2, 3], [4, 5, 6]])
print(tensor_example.dim()) # 输出: 2 (维度)
print(tensor_example.shape) # 输出: torch.Size([2, 3]) (形状)
print(tensor_example.dtype) # 输出: torch.int64 (数据类型)

3. 张量的索引和切片

可以使用类似 NumPy 的方法进行张量的索引和切片。

3.1 索引

1
2
3
4
5
6
7
8
9
10
# 创建示例张量
example_tensor = torch.tensor([[1, 2, 3], [4, 5, 6]])

# 获取单个元素
element = example_tensor[0, 1] # 第0行第1列的元素
print(element) # 输出: tensor(2)

# 获取某一行
row = example_tensor[1]
print(row) # 输出: tensor([4, 5, 6])

3.2 切片

1
2
3
# 获取前两行,前两列
slice_tensor = example_tensor[:2, :2]
print(slice_tensor) # 输出: tensor([[1, 2], [4, 5]])

4. 张量的运算

PyTorch 支持多种类型的数学运算,包括加法、减法、乘法和除法等。

4.1 基本运算

1
2
3
4
5
6
7
8
9
10
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])

# 加法
add_result = a + b
print(add_result) # 输出: tensor([5, 7, 9])

# 乘法
mul_result = a * b
print(mul_result) # 输出: tensor([4, 10, 18])

4.2 矩阵运算

1
2
3
4
5
6
7
# 创建两个矩阵
matrix_a = torch.tensor([[1, 2], [3, 4]])
matrix_b = torch.tensor([[5, 6], [7, 8]])

# 矩阵乘法
matrix_mul_result = torch.matmul(matrix_a, matrix_b)
print(matrix_mul_result) # 输出: tensor([[19, 22], [43, 50]])

5. 张量的广播

张量广播是指在进行运算时,自动扩展形状不相同的张量以匹配进行运算的张量。

1
2
3
4
5
6
7
# 示例
a = torch.tensor([1, 2, 3]) # 形状 (3,)
b = torch.tensor([[1], [2]]) # 形状 (2,1)

# 进行广播相加
broadcast_result = a + b
print(broadcast_result) # 输出: tensor([[2, 3, 4], [3, 4, 5]])

6. 张量的转换

张量可以在 CPU 和 GPU 之间移动,也可以转换数据类型。

6.1 移动到 GPU

1
2
3
4
5
6
7
if torch.cuda.is_available():
device = 'cuda'
else:
device = 'cpu'

tensor_on_gpu = tensor_example.to(device) # 将张量移动到 GPU
print(tensor_on_gpu.device) # 输出: 'cuda:0'

6.2 改变数据类型

1
2
float_tensor = torch.tensor([1, 2, 3], dtype=torch.float32)  # 改变数据类型为 float
print(float_tensor.dtype) # 输出: torch.float32

7. 小结

在本小节中,我们介绍了 PyTorch 中的张量操作,包括创建张量、索引与切片、基本运算、矩阵运算、广播以及张量转换。这些操作是 PyTorch 编程的基础,对于后续构建深度学习模型至关重要。请多加练习,熟悉这些操作,以便在实际项目中能够熟练应用。

5 PyTorch 张量操作教程

https://zglg.work/pytorch-tutorial/5/

作者

AI教程网

发布于

2024-08-07

更新于

2024-08-10

许可协议