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

发布于:2024-08-18 ⋅ 阅读:(36) ⋅ 点赞:(0)

系列文章:
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() 禁用梯度计算以提高计算效率,因为我们不需要更新参数。
    • 使用训练好的模型进行预测,并打印结果。

网站公告

今日签到

点亮在社区的每一天
去签到