4 PyTorch 张量基础

4 PyTorch 张量基础

在深度学习中,张量是最基础的数据结构。PyTorch 的张量类似于 NumPy 的数组,但它可以在 GPU 上进行计算,从而加速运算。以下我们将从基础开始,逐步深入了解 PyTorch 张量。

1. 什么是张量?

张量是一个多维数组,可以看作是标量、向量和矩阵的推广。以下是一些张量的基本概念:

  • 标量:0维张量,例如一个单独的数值。
  • 向量:1维张量,例如一组数值。
  • 矩阵:2维张量,例如二维数组。
  • 高维张量:3维及以上张量,例如图片、视频等。

2. 创建张量

2.1 从数据创建张量

使用 torch.tensor 可以从数据(列表、元组等)创建张量:

1
2
3
4
5
6
7
8
9
10
11
12
13
import torch

# 创建一个标量张量
scalar_tensor = torch.tensor(3.14)
print(scalar_tensor)

# 创建一个向量张量
vector_tensor = torch.tensor([1.0, 2.0, 3.0])
print(vector_tensor)

# 创建一个二维矩阵张量
matrix_tensor = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
print(matrix_tensor)

2.2 创建特定形状的张量

PyTorch 提供了几种函数来创建特定形状的张量,如全零、全一和随机数等:

1
2
3
4
5
6
7
8
9
10
11
# 创建一个全零的张量
zero_tensor = torch.zeros(2, 3)
print(zero_tensor)

# 创建一个全一的张量
one_tensor = torch.ones(2, 3)
print(one_tensor)

# 创建一个随机数的张量
random_tensor = torch.rand(2, 3)
print(random_tensor)

2.3 从 NumPy 数组创建张量

如果你已经有了 NumPy 数组,可以使用 torch.from_numpy 将其转换为张量:

1
2
3
4
5
6
7
8
import numpy as np

# 创建一个 NumPy 数组
numpy_array = np.array([[1, 2, 3], [4, 5, 6]])

# 将 NumPy 数组转换为 PyTorch 张量
tensor_from_numpy = torch.from_numpy(numpy_array)
print(tensor_from_numpy)

3. 张量的属性

张量具有一些重要的属性,如形状、数据类型等:

1
2
3
4
5
6
7
8
9
10
11
# 创建一个张量
tensor = torch.tensor([[1, 2, 3], [4, 5, 6]], dtype=torch.float32)

# 获取张量的形状
print(tensor.shape) # 输出: torch.Size([2, 3])

# 获取张量的数据类型
print(tensor.dtype) # 输出: torch.float32

# 获取张量的维度数量
print(tensor.dim()) # 输出: 2

4. 张量的基本操作

4.1 张量的加法和减法

可以使用 +- 操作符进行张量的加法和减法:

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

# 张量相加
tensor_sum = tensor_a + tensor_b
print(tensor_sum)

# 张量相减
tensor_diff = tensor_a - tensor_b
print(tensor_diff)

4.2 张量的乘法和除法

乘法和除法可以使用 */ 操作符。注意,张量之间的乘法为逐元素乘法,如果要进行矩阵乘法可以使用 torch.mm@ 符号:

1
2
3
4
5
6
7
# 逐元素乘法
tensor_product = tensor_a * tensor_b
print(tensor_product)

# 矩阵乘法
matrix_product = torch.mm(tensor_a, tensor_b.T) # 转置 tensor_b
print(matrix_product)

4.3 张量的索引和切片

张量支持索引和切片,类似于 Python 的列表和 NumPy 数组:

1
2
3
4
5
6
7
8
9
# 创建一个张量
tensor = torch.tensor([[1, 2, 3], [4, 5, 6]])

# 索引
print(tensor[0, 1]) # 输出: 2

# 切片
print(tensor[:, 1]) # 输出: tensor([2, 5]),第二列
print(tensor[1, :]) # 输出: tensor([4, 5, 6]),第二行

5. 张量的转换

5.1 转换数据类型

可以使用 .to() 方法将张量转换为其他数据类型(如 floatint 等):

1
2
3
4
5
tensor_float = tensor_a.float()
print(tensor_float)

tensor_int = tensor_a.int()
print(tensor_int)

5.2 移动到 GPU

如果你的计算机有 GPU,可以使用 .to(device) 方法将张量移动到 GPU:

1
2
3
4
5
# 移动张量到 GPU
if torch.cuda.is_available():
device = torch.device('cuda')
tensor_gpu = tensor.to(device)
print(tensor_gpu)

6. 总结

本文介绍了 PyTorch 张量的基础知识,包括创建、操作、属性以及转换等。掌握张量的基本使用是学习深度学习和使用 PyTorch 的基础。通过实践和示例,将能更好地理解和应用这些概念。接下来的学习中,我们将继续深入 PyTorch 的其他功能和应用。

作者

AI教程网

发布于

2024-08-07

更新于

2024-08-10

许可协议