torch.xxx函数总结
1 torch.rand()
1.1 torch.rand()
表示均匀分布
从区间 [0,1) 返回一个由均匀分布的随机数填充的张量,张量的形状由变量参数 size 定义
import torch
# 生成一个大小为 (2, 3) 的随机张量,数据类型为 float32
x = torch.rand(2, 3)
print(x)
# 生成一个大小为 (3, 4, 5) 的随机张量,数据类型为 float64
y = torch.rand(3, 4, 5, dtype=torch.float64)
print(y)
tensor([[0.5988, 0.7453, 0.3764],
[0.6998, 0.8541, 0.5838]])
tensor([[[0.6379, 0.6631, 0.2786, 0.9683, 0.5588],
[0.5009, 0.2348, 0.0503, 0.1906, 0.2435],
[0.9979, 0.1057, 0.6587, 0.4204, 0.7578],
[0.8619, 0.9541, 0.7512, 0.3802, 0.0768]],
[[0.7164, 0.4224, 0.8834, 0.3443, 0.9853],
[0.6963, 0.7374, 0.7804, 0.5826, 0.9867],
[0.3687, 0.5029, 0.7452, 0.6976, 0.2771],
[0.8756, 0.1125, 0.9358, 0.2405, 0.4086]],
[[0.2406, 0.1449, 0.9088, 0.5733, 0.2023],
[0.7108, 0.2234, 0.1144, 0.1124, 0.2234],
[0.9807, 0.9561, 0.0659, 0.7898, 0.8225],
[0.1617, 0.2439, 0.6849, 0.6631, 0.3187
1.2 torch.randn()
表示标准正态分布
返回一个张量,包含了从标准正态分布(均值为0,方差为1,即高斯白噪声)中抽取的一组随机数。张量的形状由参数sizes定义。
import torch
# 生成一个大小为 (2, 3) 的标准正态分布随机张量
x = torch.randn(2, 3)
print(x)
# Output: tensor([[-0.4582, -0.4339, -0.8888],
# [ 1.1895, -0.1888, -0.4237]])
# 生成一个大小为 (3, 4, 5) 的标准正态分布随机张量,数据类型为 float64
y = torch.randn(3, 4, 5, dtype=torch.float64)
print(y)
# Output: tensor([[[ 0.3709, -0.3108, -0.5467, -0.1413, -0.0804],
# [-1.0409, 1.0014, 0.8142, -0.3468, 0.6112],
# [-0.1378, -0.4145, -0.1941, -0.5175, -1.2317],
# [-0.6282, 0.0643, -0.3893, 0.1265, 0.1712]],
# [[ 0.4625, -0.4507, -0.2155, -0.8245, -0.1979],
# [-0.3193, 0.7851, 0.1017, -0.2569, 1.5656],
# [-0.1506, 0.6815, -1.0447, -0.2115, -0.6695],
# [-0.2083, -1.3472, -0.9822, 0.0697, 0.1097]],
# [[-0.2739, -0.9266, -1.0646, -0.6651, 1.2948],
# [ 0.2336, 0.1868, -1.1757, 1.2541, 0.9079],
# [ 0.0828, -0.4683, -1.0792, -1.2832, 0.0579],
# [-0.3688, -0.9653, -1.0811, 1.0759, -0.0839]]], dtype=torch.float64)
2 torch.zeros()
返回一个形状为size,类型为torch.dtyoe,里面的每一个值都是0的tensor。
import torch
# 生成一个大小为 (2, 3) 的全零张量
x = torch.zeros(2, 3)
print(x)
# Output: tensor([[0., 0., 0.],
# [0., 0., 0.]])
# 生成一个大小为 (3, 4, 5) 的全零张量,数据类型为 float64
y = torch.zeros(3, 4, 5, dtype=torch.float64)
print(y)
# Output: tensor([[[0., 0., 0., 0., 0.],
# [0., 0., 0., 0., 0.],
# [0., 0., 0., 0., 0.]
3 计算梯度并且更新卷积核参数
conv2d.zero_grad()
l.sum().backward()
conv2d.weight.data[:] -= lr * conv2d.weight.grad
这三行代码实现了一个典型的 PyTorch 训练迭代过程中的反向传播和参数更新步骤,具体如下:
conv2d.zero_grad() :将卷积层的权重参数的梯度清零,以便进行新一轮的梯度计算。
l.sum().backward() :根据损失张量 l,使用 PyTorch 内置的自动求导功能,计算出 l 相对于卷积层权重参数的梯度。
conv2d.weight.data[:] -= lr * conv2d.weight.grad :根据梯度下降法的更新规则,使用学习率 lr 以及计算出的梯度值 conv2d.weight.grad,更新卷积层权重参数。
这三行代码是深度学习中非常常见的训练迭代过程中的反向传播和参数更新操作,其中 zero_grad() 和 backward() 方法是 PyTorch 内置的自动求导功能的核心方法,而权重参数的更新则是根据梯度下降法的基本原理实现的。这些操作可以有效地优化模型的参数,使其能够更好地拟合训练数据,并在测试数据上取得更好的表现。
4 torch.eye(())
torch.eye()是一个PyTorch的函数,用于创建一个指定大小的单位矩阵。单位矩阵是一个方阵,在主对角线上的元素都是1,其他元素都是0。 torch.eye()函数返回的是一个二维张量(tensor),其中主对角线上的元素都是1,其余元素都是0。
torch.eye()函数可以接收一个参数 n,表示矩阵的大小。如果不指定参数,默认情况下返回一个大小为1的单位矩阵。
下面是torch.eye()函数的用法示例:
import torch
# 创建一个大小为3的单位矩阵
eye_tensor = torch.eye(3)
print(eye_tensor)
tensor([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
5 torch.cat()
torch.cat() 是一种拼接函数,
按维数0拼接(竖着拼)
C = torch.cat( (A,B),0 )
按维数1拼接(横着拼)
C = torch.cat( (A,B),1 )
!!!持续更新