学习参考:菜鸟教程
pytorch基础概念:张量(Tensor)、自动求导(Autograd)、神经网络模块(nn.Module)、优化器(optim)等。
张量(Tensor)
pytorch的核心数据结构,可视为多维数组,可以在GPU上并行运算,也可以运行在不同的设备上来加快计算速度。
- 维度(Dimensionality):标量(0维),向量(1维),矩阵(2维)。
- 形状(Shape):大小。
- 数据类型(Dtype):包括整数型(如torch.int8、torch.int32)、浮点型(如torch.float32、torch.float64)和布尔型(torch.bool)。
生成随机数的几个函数:
点击查看代码
# 生成形状为(3,4)的标准正态分布随机数
x = torch.randn(3, 4)
# 生成0到10之间的形状为(3,4)的随机整数
x = torch.randint(0, 10, (3, 4))
# 生成0到1之间均匀分布的浮点随机数
x = torch.rand(3, 4) # 形状为(3,4),值在[0, 1)之间
# 生成0到n-1的随机排列
x = torch.randperm(10) # 生成0-9的随机排列
# 根据概率生成0-1张量
probs = torch.tensor([0.3, 0.7]) # 概率张量
x = torch.bernoulli(probs) # 根据概率生成0或1
# 自定义均值和标准差的正态分布
mean = torch.tensor([0.0, 1.0])
std = torch.tensor([1.0, 2.0])
x = torch.normal(mean, std)
# 泊松分布随机数生成
rates = torch.tensor([1.0, 2.0])
x = torch.poisson(rates)
# 生成指定范围内的均匀分布随机数
x = torch.distributions.Uniform(low=0, high=1).sample((3, 4))
自动求导(Autograd)
基于链式法则(吴恩达以及李宏毅课程中都有详细介绍)主要用于在训练神经网络时计算梯度以及进行反向传播算法的实现。
使用动态图:计算图在运行时动态创建,每次执行操作时图都会更新。
点击查看代码
x = torch.randn(2,2, requires_grad=True)
print(x)
print(x.grad)
y=x+2
z=y*y*3
out=z.mean()
print(out)
out.backward()
print(x.grad)
#结果
# tensor([[-0.8082, -0.4631],[-1.0004, 0.1259]], requires_grad=True)
# None
# tensor(6.9758, grad_fn=<MeanBackward0>)
# tensor([[1.7878, 2.3054],[1.4994, 3.1888]])
神经网络(nn.Module)
神经网络通过调整神经元之间的连接权重来优化预测结果,这一过程涉及前向传播、损失计算、反向传播和参数更新。
神经网络的类型包括前馈神经网络、卷积神经网络(CNN)、循环神经网络(RNN)和长短期记忆网络(LSTM)。
训练过程:前向传播->计算损失->反向传播->参数更新->迭代