🌞欢迎莅临我的个人主页👈🏻这里是我专注于深度学习领域、用心分享知识精粹与智慧火花的独特角落!🍉
🌈如果大家喜欢文章,欢迎:关注🍷+点赞👍🏻+评论✍🏻+收藏🌟,如有错误敬请指正!🪐
🍓“请不要相信胜利就像山坡上的蒲公英一样唾手可得,但是请相信生活中总有美好值得我们全力以赴,哪怕粉身碎骨!”🌹
目录
预备知识
requires_grad :用于指示是否需要计算相应张量的梯度。如果 requires_grad=True,则表示需要对该张量进行梯度计算。
epoch:表示将所有训练样本都过一遍的完整训练过程。
Tensor:Tensor定义为最多可以包含四个维度的多维数组,但可以通过堆叠来创建更高维度的张量。可以使用 torch.Tensor() 、torch.eye()、 torch.randn() 、 torch.zeros() 或 torch.ones() 等构造函数来创建张量对象。
模型参数:模型内部的配置变量,模型可以根据数据可以自动学习出的变量,自行根据数据进行驱动调整。如:权重,偏差等。
超参数:模型外部的配置,不需要数据来驱动,而是在训练前或者训练中人为进行设定和调整,一般需要为它根据已有或现有的经验指定“正确”的值。如:迭代次数epoch,批量大小batch-size,学习率,深层神经网络隐藏层数等。
基础知识
(1)PyTorch基础知识
用法1:PyTorch计算梯度
x = torch.tensor(1., requires_grad=True)
y = x**2
y.backward()
print(x.grad) # x.grad = 2
通过torch.tensor()方法创建一个值为1.0的张量,并将requires_grad参数设置为True。根据公式 y = x**2 构建计算图,调用 y.backward() 方法,该方法会自动计算 y 对于 x 的梯度,并将梯度值保存在 x.grad 属性中,通过打印 x.grad 来查看计算得到的梯度值。
用法2:线性回归模型训练
x = torch.randn(10, 3)
y = torch.randn(10, 2)
linear = nn.Linear(3, 2)
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(linear.parameters(), lr=0.01)
pred = linear(x)
loss = criterion(pred, y)
loss.backward()
optimizer.step()
pred = linear(x)
loss = criterion(pred, y)
通过torch.rand()方法创建随机张量x和y,x是输入特征,y是目标值,使用nn.Linear(3,2)创建全连接层,输入、输出维度分别为3和2。定义损失函数 criterion 为均方误差(MSE)损失。优化器 optimizer,使用随机梯度下降(SGD)算法来更新模型参数,将 linear.parameters() 传递给优化器,以更新 linear 中的权重和偏置。进行前向传播,计算 模型的预测值 pred和损失 loss,将预测值 pred 和目标值 y 传递给损失函数 criterion。进行反向传播,通过调用 loss.backward() 来计算梯度。调用 optimizer.step() 来执行一步梯度下降,更新模型的参数。进行一步梯度下降后,再次计算预测值 pred 和损失 loss。
用法3:NumPy 数组和 PyTorch 张量转换
x = np.array([[1, 2], [3, 4]])
y = torch.from_numpy(x)
z = y.numpy()
创建了一个 2x2 的 NumPy 数组 x。使用 torch.from_numpy()函数将 NumPy 数组转换为 PyTorch 张量 y。现在,y 是一个 PyTorch 张量,与原始的 NumPy 数组 x 共享相同的数据存储,因此对 y 的修改会反映在 x 上。也可以使用 y.numpy() 方法将 PyTorch 张量转换回 NumPy 数组 。
用法4:构建数据集和加载数据(以CIFAR10数据集为例)
train_dataset = torchvision.datasets.CIFAR10(root=r'path',
train=True,
transform=transforms.ToTensor(),
download=True)
image, label = train_dataset[0]
train_loader = torch.utils.data.DataLoader(dataset=train_dataset,
batch_size=64,
shuffle=True)
data_iter = iter(train_loader)
images, labels = data_iter.next()
for images, labels in train_loader:
# Training code