常用torch方法!🍧

常用torch方法

1.cat

torch.cat 是 PyTorch 中的一个函数,用于沿指定的维度拼接(连接)多个张量。

具体而言,Tensor.cat 函数将多个张量沿着指定的维度连接在一起,形成一个新的张量。连接的维度称为“拼接维度”。函数的签名通常如下:

1
output_tensor = torch.cat(tensors, dim=0, out=None)

其中:

  • tensors 是一个张量列表,包含了要连接的张量。
  • dim 是一个整数,表示沿着哪个维度进行连接。默认为 0。
  • out 是一个可选的输出张量。

以下是一个示例:

1
2
3
4
5
6
7
8
9
import torch

# 创建两个示例张量
tensor1 = torch.tensor([[1, 2], [3, 4]])
tensor2 = torch.tensor([[5, 6], [7, 8]])

# 在第0维度上拼接这两个张量
concatenated_tensor = torch.cat((tensor1, tensor2), dim=0)
print(concatenated_tensor)

结果:

1
2
3
4
tensor([[1, 2],
[3, 4],
[5, 6],
[7, 8]])

在这个示例中,我们沿着第0维度拼接了两个二维张量,因此第一个张量的两行与第二个张量的两行按顺序连接在一起,形成了一个新的张量。

2.empty

torch.empty() 是一个用于创建一个未初始化的张量的函数,其具体的签名如下所示:

1
torch.empty(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

这个函数创建一个指定大小的张量,但是不会对张量进行初始化,即张量的元素值是未定义的,取决于内存的状态。

示例:

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

# 创建一个形状为 2x3 的未初始化的张量
empty_tensor = torch.empty(2, 3)
print("Empty Tensor:")
print(empty_tensor)

# 指定数据类型为 float32
empty_float_tensor = torch.empty(2, 3, dtype=torch.float32)
print("\nEmpty Float32 Tensor:")
print(empty_float_tensor)

3.tanh

torch.tanh() 是 PyTorch 中的一个函数,用于计算张量中每个元素的双曲正切值。双曲正切函数是一种常见的非线性激活函数,通常用于神经网络中。

该函数的输出范围是 (−1,1),当输入接近正无穷时,输出接近于 1,当输入接近负无穷时,输出接近于 -1,当输入为 0 时,输出为 0。

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

# 创建一个张量
tensor = torch.tensor([-1.0, 0.0, 1.0])

# 计算张量中每个元素的双曲正切值
result = torch.tanh(tensor)

print("Original Tensor:")
print(tensor)
print("\nTanh Result:")
print(result)

输出:

1
2
3
4
5
Original Tensor:
tensor([-1., 0., 1.])

Tanh Result:
tensor([-0.7616, 0.0000, 0.7616])

4.bmm

torch.bmm 是 PyTorch 中用于批量矩阵乘法(Batch Matrix Multiplication)的函数。假设你有两个张量 AB,它们的形状分别为 (batch_size, n, m)(batch_size, m, p)torch.bmm 将执行批量的矩阵乘法,即对于每个批次中的矩阵对,计算矩阵乘积。

输出的结果将是一个形状为 (batch_size, n, p) 的张量,其中每个批次的乘积将会被计算。

举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import torch

# 假设 A 和 B 是具体的张量,需要确保它们的形状匹配
# 例如,A的最后一个维度(m)应该与B的倒数第二个维度(m)相同
A = torch.tensor([[[1, 2, 3],
[4, 5, 6]],

[[7, 8, 9],
[10, 11, 12]]])

B = torch.tensor([[[2, 3],
[4, 5],
[6, 7]],

[[1, 2],
[3, 4],
[5, 6]]])

# 计算矩阵乘积
C = torch.bmm(A, B)

print(C)

结果:

1
2
3
4
5
tensor([[[ 28,  34],
[ 64, 79]],

[[ 76, 100],
[103, 136]]])

即让每个批次的张量相乘。

5.randn

torch.randn() 是 PyTorch 中的一个函数,用于生成具有标准正态分布(均值为0,标准差为1)的随机张量。其语法如下:

1
torch.randn(*size, dtype=None, device=None, requires_grad=False)

参数说明:

  • *size:生成张量的形状,可以是一个整数或者元组。
  • dtype(可选):生成张量的数据类型,默认为 torch.float32
  • device(可选):生成张量所在的设备,默认为 None,表示使用当前的默认设备。
  • requires_grad(可选):指定是否需要计算梯度,默认为 False

示例:

1
2
3
4
5
import torch

# 生成一个形状为 (3, 3) 的随机张量,满足标准正态分布
x = torch.randn(3, 3)
print(x)

输出:

1
2
3
tensor([[-0.6848, -0.3440,  1.1301],
[-0.1869, 1.0607, -1.0181],
[ 0.5477, -0.1585, -0.3474]])

6.randint

torch.randint() 是 PyTorch 中的一个函数,用于生成具有离散均匀分布的随机整数张量。其语法如下:

1
torch.randint(low, high, size, dtype=None, device=None, requires_grad=False)

参数说明:

  • low:生成随机整数的下界(闭区间)。
  • high:生成随机整数的上界(开区间)。
  • size:生成张量的形状,可以是一个整数或者元组。
  • dtype(可选):生成张量的数据类型,默认为 torch.int64
  • device(可选):生成张量所在的设备,默认为 None,表示使用当前的默认设备。
  • requires_grad(可选):指定是否需要计算梯度,默认为 False

示例:

1
2
3
4
5
import torch

# 生成一个形状为 (3, 3) 的随机整数张量,范围在 [0, 10) 内
x = torch.randint(0, 10, (3, 3))
print(x)

结果:

1
2
3
tensor([[7, 5, 1],
[9, 4, 9],
[8, 6, 2]])

7.manual_seed

torch.manual_seed(seed) 是 PyTorch 中的一个函数,用于设置随机数种子。随机数种子对于深度学习任务中的随机性操作是非常重要的,比如权重初始化、数据扰动等。

通过调用 torch.manual_seed(seed) 函数,可以在每次运行代码时生成相同的随机数序列,这样可以确保实验的可复现性。seed 参数是一个整数,它是随机数生成器的种子值。

示例用法:

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

# 设置随机数种子为固定值 42
torch.manual_seed(42)

# 下面的操作将使用相同的随机数种子生成随机数
a = torch.randn(3, 3)
b = torch.randn(3, 3)

# 打印结果
print(a)
print(b)

在此示例中,通过设置随机数种子为 42,每次运行代码时,生成的随机数将是相同的。这有助于实验结果的可重现性。

8.exp

torch.exp 是 PyTorch 中的一个函数,用于计算输入张量的指数函数。该函数的输入可以是一个张量或者一个数值。对于张量输入,torch.exp 会对张量中的每个元素进行指数运算,即将每个元素取自然指数。对于数值输入,函数返回输入的指数值。

以下是 torch.exp 的基本使用方法:

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

# 对数值进行指数运算
x = 2.0
exp_x = torch.exp(x)
print(exp_x) # 输出: tensor(7.3891)

# 对张量进行指数运算
tensor_x = torch.tensor([1.0, 2.0, 3.0])
exp_tensor_x = torch.exp(tensor_x)
print(exp_tensor_x) # 输出: tensor([ 2.7183, 7.3891, 20.0855])

tips:

当 x 为任意实数时,exp(x) 的值等于 e 的 x 次方。

9.arrange

torch.arange 是 PyTorch 中的一个函数,用于创建一个包含等间隔值的一维张量。它的语法如下:

1
torch.arange(start=0, end, step=1, dtype=None, layout=torch.strided, device=None, requires_grad=False)

torch.arange 是 PyTorch 中的一个函数,用于创建一个包含等间隔值的一维张量。它的语法如下:

1
2
pythonCopy code
torch.arange(start=0, end, step=1, dtype=None, layout=torch.strided, device=None, requires_grad=False)

参数说明:

  • start:起始值(默认为 0)。
  • end:终止值(不包含在结果中)。
  • step:步长(默认为 1)。
  • dtype:结果张量的数据类型(默认为 None,即根据上下文推断)。
  • layout:结果张量的布局(默认为 torch.strided)。
  • device:结果张量所在的设备(默认为 None,即使用当前设备)。
  • requires_grad:结果张量是否需要梯度(默认为 False)。

torch.arange 返回一个从 startend(不包含 end)的一维张量,步长为 step。下面是一个示例:

1
2
3
4
5
6
7
8
9
import torch

# 创建一个从 0 到 9(不包含 10)的一维张量
tensor = torch.arange(10)
print(tensor) # 输出: tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 创建一个从 5 到 15(不包含 15)的一维张量,步长为 2
tensor = torch.arange(5, 15, 2)
print(tensor) # 输出: tensor([ 5, 7, 9, 11, 13])

10.triu

torch.triu 是 PyTorch 中的一个函数,用于生成一个张量,该张量包含给定输入张量的上三角部分(包括对角线)。在数学上,上三角矩阵是一个所有位于主对角线及其以上的元素都不为零的矩阵。

以下是 torch.triu 的中文解释:

  • 函数名:torch.triu
  • 功能:返回输入张量的上三角部分。
  • 参数:
    • input:(张量)要处理的输入张量。
    • diagonal:(整数,可选)对角线的偏移量。默认值为0,表示主对角线;正值表示上面的对角线,负值表示下面的对角线。
  • 返回值:一个张量,包含输入张量的上三角部分。
1
2
3
4
5
6
7
8
import torch

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

result = torch.triu(x)
print(result)

输出:

1
2
3
tensor([[1, 2, 3],
[0, 5, 6],
[0, 0, 9]])

常用torch方法!🍧
https://yangchuanzhi20.github.io/2024/02/21/人工智能/Pytorch/基础知识/常用torch方法/
作者
白色很哇塞
发布于
2024年2月21日
许可协议