当前位置: 首页 > java >正文

pytorch简单线性回归模型

模型五步走

1、获取数据

     1. 数据预处理

     2.归一化

     3.转换为张量

2、定义模型

3、定义损失函数和优化器

4、模型训练

5、模型评估和调优

调优方法

6、可视化(可选)

示例代码

import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import mean_absolute_error, r2_score# print(np.__config__.show())##1、生成数据
np.random.seed(42)
def generate_data(x, slope=2.0, intercept=1.0, noise_std=2.0):"""生成带有噪声的线性数据 y = a*x + b + ε:param x: 输入特征:param slope: 斜率 a:param intercept: 截距 b:param noise_std: 噪声标准差:return: y 数据,以及真实参数 (slope, intercept)"""y = slope * x + intercept + np.random.randn(len(x)) * noise_stdreturn y, (slope, intercept)# 使用示例
x = np.linspace(0, 10, 100)
y, true_params = generate_data(x, slope=2, intercept=1, noise_std=2)
print("真实参数:", true_params)#归一化
x_norm = (x - x.min()) / (x.max() - x.min())
y_norm = (y - y.min()) / (y.max() - y.min())#转换为pytorch张量
x_tensor = torch.tensor(x_norm, dtype=torch.float32).view(-1, 1)
y_tensor = torch.tensor(y_norm, dtype=torch.float32).view(-1, 1)#2、定义模型
class LinearRegression(nn.Module):def __init__(self,input_size,output_size):super(LinearRegression, self).__init__()self.linear = nn.Linear(input_size,output_size)def forward(self, x):out = self.linear(x)return out#实例化模型
model = LinearRegression(1,1)#3、定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.0005, weight_decay=1e-5)#4、训练模型
num_epochs = 10000
torch.nn.init.xavier_normal_(model.linear.weight)
scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, 'min', patience=5)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) % 1000 == 0:print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')#5、输出测试结果
print('训练完成!')
print(f'权重: {model.linear.weight.item():.4f}, 偏置: {model.linear.bias.item():.4f}')#6、可视化
predicted = model(x_tensor).detach().numpy()
# 反归一化
predicted_unscaled = predicted * (y.max() - y.min()) + y.min()
y_true_unscaled = y_tensor.numpy() * (y.max() - y.min()) + y.min()# 评估指标
mae = mean_absolute_error(y_true_unscaled, predicted_unscaled)
r2 = r2_score(y_true_unscaled, predicted_unscaled)print(f'均方误差(MSE): {loss.item():.4f}')
print(f'平均绝对误差(MAE): {mae:.4f}')
print(f'R²决定系数(R²): {r2:.4f}')
r22 = r2_score(y_tensor.numpy(), predicted)
print(f"Model R² score: {r22:.4f}")#中文乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.plot(x_tensor, y_tensor, 'ro', label='Original data')
plt.plot(x_tensor, predicted, label='拟合曲线')
plt.legend()
plt.show()

http://www.xdnf.cn/news/9033.html

相关文章:

  • 如何轻松地将文件从 iPhone 传输到 PC
  • Python基础教程:从零开始学习编程 - 第1-3天
  • 全光网络ICU床旁监护系统:重新定义重症监护的智慧中枢
  • python入门day01
  • UE5 Niagara Advance 学习笔记
  • git学习笔记
  • matlab实现激光腔长计算满足热透镜效应
  • JAVA 学习日志
  • 防火墙的SD-WAN功能
  • JAVA基础编程练习题--50道
  • 【Webtrees 用户手册】第 2 章 - 访客须知
  • 网易互娱游戏研发实习一面
  • ubuntu脚本常用命令
  • 海外呼叫中心优势与挑战分析
  • Bota Systems与Kinova合作:赋予AI机器人触觉能力
  • 如何给自研MCP加上安全验证
  • 类的设计模式——单例、工厂以及建造者模式
  • java-单列集合list与set。
  • 前端移动端上传图片pc端如何实时获取
  • 2 的 4 次方到 10 次方
  • android安卓模拟器中访问宿主机的开发接口服务
  • Axure元件动作七:移动、旋转、启用/禁用效果、置于顶层/底层详解
  • 芋道框架 - 接口设置匿名访问
  • 鸿蒙OSUniApp 实现的短信验证码登录功能#三方框架 #Uniapp
  • Numba模块的用法(高性能计算)
  • 类和对象(2)
  • LlamaFirewall:开源框架助力检测与缓解AI核心安全风险
  • C++项目中调用C#DLL的的方式
  • 人工智能工程师学习路线总结(下)
  • pytorch 15.2 学习率调度在PyTorch中的实现方法