PyTorch 中 12 种张量操作详解

开发
本文将详细介绍 PyTorch 中常用的 12 种张量操作,帮助你更好地理解和使用这个工具。

PyTorch 是一个强大的深度学习框架,它允许开发者轻松地定义和训练神经网络。张量是 PyTorch 的核心数据结构,类似于 NumPy 数组,但支持自动微分以及在 GPU 上加速计算。本文将详细介绍 PyTorch 中常用的 12 种张量操作,帮助你更好地理解和使用这个工具。

1.创建张量

首先,我们需要安装 PyTorch 并导入必要的库。

# 安装 PyTorch
!pip install torch

# 导入 PyTorch 库
import torch

创建张量是最基本的操作之一。你可以从 Python 列表或 NumPy 数组中创建张量。

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

# 从 NumPy 数组创建张量
import numpy as np
numpy_array = np.array([1, 2, 3])
tensor_from_numpy = torch.from_numpy(numpy_array)
print(tensor_from_numpy)  # 输出: tensor([1, 2, 3])

2.查看张量形状

了解张量的形状对于处理数据非常重要。

# 创建一个 2x3 的矩阵
matrix = torch.tensor([[1, 2, 3], [4, 5, 6]])
print(matrix.shape)  # 输出: torch.Size([2, 3])

3.转置张量

转置可以改变张量的维度顺序。

# 创建一个 2x3 的矩阵
matrix = torch.tensor([[1, 2, 3], [4, 5, 6]])
transposed_matrix = matrix.t()
print(transposed_matrix)  # 输出:
# tensor([[1, 4],
#         [2, 5],
#         [3, 6]])

4.拆分张量

拆分张量可以帮助你在不同维度上分割数据。

# 创建一个 3x4 的矩阵
matrix = torch.tensor([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
split_tensors = torch.split(matrix, split_size=2, dim=1)
for t in split_tensors:
    print(t)
# 输出:
# tensor([[ 1,  2],
#         [ 5,  6],
#         [ 9, 10]])
# tensor([[ 3,  4],
#         [ 7,  8],
#         [11, 12]])

5.拼接张量

拼接操作可以将多个张量合并成一个更大的张量。

# 创建两个 2x2 的矩阵
matrix1 = torch.tensor([[1, 2], [3, 4]])
matrix2 = torch.tensor([[5, 6], [7, 8]])
concatenated_tensor = torch.cat((matrix1, matrix2), dim=0)
print(concatenated_tensor)  # 输出:
# tensor([[1, 2],
#         [3, 4],
#         [5, 6],
#         [7, 8]])

6.张量索引

索引操作允许你选择张量中的特定元素或子集。

# 创建一个 2x3 的矩阵
matrix = torch.tensor([[1, 2, 3], [4, 5, 6]])
element = matrix[0, 1]
print(element)  # 输出: tensor(2)

sub_matrix = matrix[1, :]
print(sub_matrix)  # 输出: tensor([4, 5, 6])

7.张量切片

切片可以让你选择张量的一部分。

# 创建一个 2x3 的矩阵
matrix = torch.tensor([[1, 2, 3], [4, 5, 6]])
slice_tensor = matrix[:, 1:]
print(slice_tensor)  # 输出:
# tensor([[2, 3],
#         [5, 6]])

8.张量广播

广播是一种机制,允许你执行不同形状的张量之间的操作。

# 创建一个 1x3 的向量和一个标量
vector = torch.tensor([1, 2, 3])
scalar = torch.tensor(2)

# 将向量乘以标量
broadcasted_tensor = vector * scalar
print(broadcasted_tensor)  # 输出: tensor([2, 4, 6])

9.张量相加

相加操作用于将两个张量对应位置的元素相加。

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

# 相加
sum_tensor = matrix1 + matrix2
print(sum_tensor)  # 输出:
# tensor([[ 6,  8],
#         [10, 12]])

10.张量乘法

乘法操作可以用于点积或矩阵乘法。

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

# 点积
dot_product = torch.dot(matrix1.view(-1), matrix2.view(-1))
print(dot_product)  # 输出: tensor(70)

# 矩阵乘法
matrix_product = torch.matmul(matrix1, matrix2)
print(matrix_product)  # 输出:
# tensor([[19, 22],
#         [43, 50]])

11.张量归一化

归一化可以将张量的值调整到特定范围内。

# 创建一个 1x3 的向量
vector = torch.tensor([1, 2, 3])

# 归一化
normalized_vector = torch.nn.functional.normalize(vector, p=2, dim=0)
print(normalized_vector)  # 输出: tensor([0.2673, 0.5345, 0.8018])

12.张量随机初始化

随机初始化在神经网络训练中非常重要。

# 随机初始化一个 2x3 的矩阵
random_matrix = torch.randn(2, 3)
print(random_matrix)  # 输出类似:
# tensor([[ 1.0431, -0.1827, -0.2591],
#         [-0.2442, -0.3353,  0.4927]])

总结

本文详细介绍了 PyTorch 中常用的 12 种张量操作,包括创建张量、查看张量形状、转置张量、拆分张量、拼接张量、张量索引、张量切片、张量广播、张量相加、张量乘法、张量归一化和张量随机初始化。这些操作是使用 PyTorch 进行深度学习的基础,掌握它们将有助于你更高效地开发和训练神经网络模型。

责任编辑:赵宁宁 来源: 小白PythonAI编程
相关推荐

2021-06-18 06:31:55

PyTorchPython深度学习

2021-11-05 12:59:51

深度学习PytorchTenso

2022-01-03 16:08:36

深度学习PyTorchNumPy

2024-03-01 20:55:40

Pytorch张量Tensor

2024-11-08 13:34:24

2021-09-22 12:56:19

编程技能Golang

2009-12-18 09:23:11

2024-01-05 17:15:21

pytorchtensor深度学习

2024-10-29 16:06:27

2023-09-22 11:58:49

2015-04-07 10:31:31

PHPMySQLBuffer用法

2020-06-28 09:40:58

操作系统GPUCPU

2024-07-16 14:15:09

2023-09-21 13:43:54

2011-08-30 14:25:06

QT数据库

2023-06-27 08:45:19

原子操作Golang

2010-03-17 12:53:43

Python Libr

2009-02-23 13:41:42

XML操作函数SQL Server

2024-04-03 00:10:24

C#System数据

2024-01-15 10:46:02

点赞
收藏

51CTO技术栈公众号