首页 > 其他分享 >Pytorch相关(第四篇)

Pytorch相关(第四篇)

时间:2024-09-07 14:26:18浏览次数:9  
标签:plt tensor nn 梯度 模型 torch Pytorch 相关 第四篇

Pytorch 自动梯度法 完整例子

下面是一个使用 PyTorch 自动梯度法的完整例子。这个例子展示了如何训练一个简单的线性回归模型来拟合一组数据。我们将从头到尾覆盖所有步骤,包括数据准备、模型定义、训练过程以及评估。

1. 安装 PyTorch

确保你已经安装了 PyTorch。如果没有,请先安装:

pip install torch

2. 完整代码示例

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import matplotlib.pyplot as plt

# 1. 生成模拟数据
# 输入数据
x = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
# 目标数据
y = np.array([2.0, 4.0, 6.0, 8.0, 10.0])

# 将数据转换为 PyTorch 张量
x_tensor = torch.tensor(x, dtype=torch.float32).view(-1, 1)  # shape: (5, 1)
y_tensor = torch.tensor(y, dtype=torch.float32).view(-1, 1)  # shape: (5, 1)

# 2. 定义线性回归模型
class LinearRegression(nn.Module):
    def __init__(self):
        super(LinearRegression, self).__init__()
        self.linear = nn.Linear(1, 1)  # 输入特征1,输出特征1

    def forward(self, x):
        return self.linear(x)

# 实例化模型
model = LinearRegression()

# 3. 定义损失函数和优化器
criterion = nn.MSELoss()  # 均方误差损失
optimizer = optim.SGD(model.parameters(), lr=0.01)  # 随机梯度下降优化器

# 4. 训练模型
num_epochs = 1000
for epoch in range(num_epochs):
    # 前向传播
    outputs = model(x_tensor)
    loss = criterion(outputs, y_tensor)

    # 反向传播
    optimizer.zero_grad()  # 清空之前的梯度
    loss.backward()       # 计算新的梯度
    optimizer.step()      # 更新参数

    # 打印损失
    if (epoch+1) % 100 == 0:
        print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item()}')

# 5. 评估模型
with torch.no_grad():
    predicted = model(x_tensor).numpy()

# 6. 可视化结果
plt.scatter(x, y, color='blue', label='Original data')
plt.plot(x, predicted, color='red', label='Fitted line')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

代码解释

  1. 生成数据:

    • 创建了简单的输入数据 x 和目标数据 y
    • 将这些数据转换为 PyTorch 张量,并调整形状以符合模型的输入要求。
  2. 定义模型:

    • 创建一个简单的线性回归模型 LinearRegression,该模型包含一个线性层 nn.Linear
  3. 定义损失函数和优化器:

    • 使用均方误差损失函数 nn.MSELoss()
    • 使用随机梯度下降优化器 optim.SGD(),设置学习率为 0.01。
  4. 训练模型:

    • 在每个训练轮次中,进行前向传播计算输出和损失。
    • 调用 loss.backward() 计算梯度,并使用 optimizer.step() 更新模型参数。
    • 每 100 个 epoch 打印一次损失。
  5. 评估模型:

    • 在不需要计算梯度的情况下进行预测,并将结果转换为 NumPy 数组以便于绘图。
  6. 可视化结果:

    • 使用 Matplotlib 绘制原始数据点和模型拟合的直线。

这个完整的例子展示了如何从头到尾使用 PyTorch 进行基本的深度学习任务,包括数据准备、模型定义、训练和评估。

标签:plt,tensor,nn,梯度,模型,torch,Pytorch,相关,第四篇
From: https://www.cnblogs.com/lovebay/p/18401647

相关文章

  • 五子棋AI:实现逻辑与相关背景探讨(上)bu
    合集-五子棋AI:遗传算法(1)1.五子棋AI:实现逻辑与相关背景探讨(上)09-07收起绪论本合集将详细讲述如何实现基于群只能遗传算法的五子棋AI,采用C++作为底层编程语言本篇将简要讨论实现思路,并在后续的文中逐一展开了解五子棋五子棋规则五子棋是一种经典的棋类游戏,规则简单却充......
  • 【保姆级教程】使用 PyTorch 自定义卷积神经网络(CNN) 实现图像分类、训练验证、预测全
    《博主简介》小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。......
  • 电感相关知识以及传输线串扰的原因分析和PCB布局建议
    一、简述电感在信号完整性章节中,相当重要,很多信号完整性的问题都和电感有关。因此,本文在叙述电感影响信号的作用机理之后,适当的给出PCB布局建议,以达到更好的信号质量。二、电感的含义电感指由导线绕成的线圈或螺线管的电感,其中由磁力线通过,电感是对表面磁场强度的数值......
  • PyTorch--Tensor的索引和切片
    importtorch#tensor索引和切片a=torch.tensor([[1,2,3],[4,5,6],[7,8,9]])b=torch.tensor([[10,10,10],[10,10,10],[10,10,10]])print("a的值:\n",a)#a的值:#tensor([[1,2,3],#[4,5,6],#[7,8,9]])#--------......
  • Pytorch相关(第二篇)
    Pytorch自动梯度法,实现自定义向前向后传播方法在PyTorch中,自定义自动求导的功能可以通过实现继承自 torch.autograd.Function 的类来实现。这允许您定义自己的前向传播(forward)和反向传播(backward)逻辑。下面是如何自定义实现向前和向后传播的详细步骤和示例代码。自定义 au......
  • Pytorch相关(第三篇)
    torch.nn.Module定义简单神经网络模型在PyTorch中,torch.nn.Module 是构建神经网络的基本构件。每一个用于构建神经网络的类都通常应该继承自 torch.nn.Module。该类提供了许多便利的功能,其中之一就是实现了 __call__ 方法。__call__ 方法的作用__call__ 方法使得 tor......
  • Pytorch相关(第一篇)
    torch.autograd.Function使用方法torch.autograd.Function 是PyTorch提供的一个接口,用于自定义自动求导的操作。通过继承这个类,你能够定义自定义的前向和反向传播逻辑。下面是使用 torch.autograd.Function 的基本步骤以及示例。自定义 Function 的步骤继承 torch.au......
  • rk3566 rk3588 Android11/13 给内置APP添加相关权限,无需手动同意APP权限
    现象:打开APP会跳出权限弹窗,给APP相关权限才能够使用APP。目录1、adb查看logcat2、在SystemUIService.java内给APP添加加权限3、开机自启动APP4、executeCMD函数1、adb查看logcat打开APP,logcat会打印APP包名。我这边包名是com.jhooit.endoscope2、在SystemUIService.......
  • SSM相关面试题
    1Spring1.1什么是SpringIOC和DI?①控制反转(IOC):Spring容器使用了工厂模式为我们创建了所需要的对象,我们使用时不需要自己去创建,直接调用Spring为我们提供的对象即可,这就是控制反转的思想。② 依赖注入(DI):Spring使用JavaBean对象的Set方法或者构造方法为我们在创建......
  • 微服务相关面试题
     1Springboot1.1讲一讲SpringBoot自动装配的原理在SpringBoot项目中的引导类上有一个注解@SpringBootApplication,这个注解是对三个注解进行了封装,分别是: @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan其中@EnableAutoConfiguration是实现自......