欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > PyTorch 基础学习(1) - 快速入门

PyTorch 基础学习(1) - 快速入门

2024/10/24 21:36:48 来源:https://blog.csdn.net/fenglingguitar/article/details/141137089  浏览:    关键词:PyTorch 基础学习(1) - 快速入门

系列文章:
PyTorch 基础学习(1) - 快速入门
PyTorch 基础学习(2)- 张量 Tensors
PyTorch 基础学习(3) - 张量的数学操作
PyTorch 基础学习(4)- 张量的类型
PyTorch 基础学习(5)- 神经网络

介绍

PyTorch学习,我们从AI的hello world程序(线性回归)开始,线性回归就通过一系列输入x和输出y,计算y = wx + b公式,w和b的合理值,训练后,就可以通过模型计算任意输入x,得到y值。

PyTorch 快速入门:线性回归

1. 环境准备
  • 安装 PyTorch

    • 访问 PyTorch 官网,选择适合你的操作系统和 Python 版本的安装命令。通常可以通过 pip 安装:
    pip install torch
    
2. 基本概念
  • 张量 (Tensor):

    • 类似于 NumPy 数组,但可以在 GPU 上运行以加速计算。
    • 是 PyTorch 中数据操作的基本单位。
    • 就是一维或多位数组,在线性回归中就是输入x数组和输出y数组
  • 自动微分 (Autograd):

    • 自动计算张量的梯度,这在训练机器学习模型时非常有用。
    • 就是通过对比结果调整w和b的值,逐渐趋于合理。
  • 神经网络 (Neural Networks):

    • 使用 torch.nn 模块来构建和训练模型。
    • 就是加载模型,torch集成了线性回顾模型
3. 线性回归模型实例

我们将通过一个简单的线性回归示例来介绍 PyTorch 的基本用法。目标是拟合一个线性关系 ( y = 2x )。

线性回归背景

线性回归是用于建模两个变量之间关系的基本统计技术。它假设两个变量之间的关系是线性的,可以用下面的公式表示:

[ y = wx + b ]

  • ( w ) 是权重(slope),决定了输入 ( x ) 如何影响输出 ( y )。
  • ( b ) 是偏置(intercept),是输出值在输入为 0 时的偏移量。
代码实现与详细注解
import torch
import torch.nn as nn
import torch.optim as optim# 数据
# 我们创建了一些简单的训练数据。x 是输入张量,y 是目标输出张量。
x = torch.tensor([[1.0], [2.0], [3.0], [4.0]], dtype=torch.float32)
y = torch.tensor([[2.0], [4.0], [6.0], [8.0]], dtype=torch.float32)# 模型
# 定义一个简单的线性模型,输入和输出都是一维的。
# nn.Linear(1, 1) 意味着我们有一个输入特征和一个输出特征。
model = nn.Linear(1, 1)# 损失和优化器
# 损失函数用于衡量模型预测值与实际值之间的差异。
# 这里使用均方误差损失(MSE),适合用于回归问题。
criterion = nn.MSELoss()# 优化器用于更新模型的参数以减少损失。
# 这里使用随机梯度下降(SGD)优化器,学习率设为 0.01。
optimizer = optim.SGD(model.parameters(), lr=0.01)# 训练
epochs = 1000  # 训练的轮数
for epoch in range(epochs):# 前向传播:通过模型计算预测值outputs = model(x)# 计算损失:比较预测值和实际值loss = criterion(outputs, y)# 反向传播和优化optimizer.zero_grad()  # 清除之前的梯度loss.backward()  # 反向传播计算梯度optimizer.step()  # 更新模型参数# 每 100 个 epoch 打印一次损失if (epoch + 1) % 100 == 0:print(f'Epoch [{epoch + 1}/{epochs}], Loss: {loss.item():.4f}')# 测试
# 关闭梯度计算,以提高计算效率,因为我们不再需要计算梯度
with torch.no_grad():# 使用训练好的模型进行预测predicted = model(torch.tensor([[5.0]]))# 打印预测结果print(f'Predicted value for input 5.0: {predicted.item():.4f}')

输出:

......
Epoch [800/1000], Loss: 0.0006
Epoch [900/1000], Loss: 0.0003
Epoch [1000/1000], Loss: 0.0002
Predicted value for input 5.0: 9.9769

详细解读

  • 数据准备:

    • xy 是一组简单的线性数据对,表示 ( y = 2x ) 的关系。我们使用 PyTorch 的 tensor 创建张量数据。
  • 模型定义:

    • nn.Linear(1, 1) 定义了一个线性层,该层有一个输入节点和一个输出节点,表示简单的线性回归模型。
  • 损失函数和优化器:

    • 损失函数: nn.MSELoss() 用于计算模型预测值与真实目标值之间的均方误差。
    • 优化器: optim.SGD 是一种优化算法,用于更新模型参数。学习率 lr=0.01 决定了每次参数更新的步长。
  • 训练过程:

    • 通过一个循环进行多次迭代,每次迭代都包括前向传播、计算损失、反向传播和参数更新。
    • optimizer.zero_grad() 清除之前的梯度。
    • loss.backward() 计算当前损失相对于参数的梯度。
    • optimizer.step() 更新模型参数以最小化损失。
  • 测试模型:

    • torch.no_grad() 禁用梯度计算以提高计算效率,因为我们不需要更新参数。
    • 使用训练好的模型进行预测,并打印结果。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com