自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测

代码:

复制代码
import torch
import numpy as np
import torch.nn as nn

# 定义数据:x_data 是特征,y_data 是标签(目标值)
data = [[-0.5, 7.7],
        [1.8, 98.5],
        [0.9, 57.8],
        [0.4, 39.2],
        [-1.4, -15.7],
        [-1.4, -37.3],
        [-1.8, -49.1],
        [1.5, 75.6],
        [0.4, 34.0],
        [0.8, 62.3]]

# 将数据转为 numpy 数组
data = np.array(data)

# 提取 x_data 和 y_data
x_data = data[:, 0]  # 取第一列作为输入特征
y_data = data[:, 1]  # 取第二列作为目标标签

# 将数据转换为 PyTorch 张量
x_train = torch.tensor(x_data, dtype=torch.float32)  # 输入特征
y_train = torch.tensor(y_data, dtype=torch.float32)  # 目标标签

# 使用 TensorDataset 来创建一个数据集
from torch.utils.data import DataLoader, TensorDataset

dataset = TensorDataset(x_train, y_train)  # 使用训练数据创建数据集
dataloader = DataLoader(dataset, batch_size=2, shuffle=True)  # 将数据集转换为 DataLoader,批大小为 2,且每个 epoch 都会随机打乱数据

# 定义损失函数:均方误差损失 (MSELoss)
criterion = nn.MSELoss()


# 定义线性回归模型
class LinearModel(nn.Module):
    def __init__(self):
        super(LinearModel, self).__init__()
        # 使用一个线性层,输入为1维,输出为1维
        self.layers = nn.Linear(1, 1)

    def forward(self, x):
        # 直接返回线性层的输出
        return self.layers(x)


# 初始化模型
model = LinearModel()

# 定义优化器:使用随机梯度下降 (SGD),学习率为 0.01
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# 设置训练的 epoch 数量
epochs = 500

# 开始训练
for n in range(1, epochs + 1):
    epoch_loss = 0  # 初始化每个 epoch 的总损失

    # 遍历每一个 batch
    for batch_x, batch_y in dataloader:
        # 对每个输入 batch_x 添加一个维度,使其适应线性回归模型
        y_pred = model(batch_x.unsqueeze(1))

        # 计算当前 batch 的损失
        batch_loss = criterion(y_pred.squeeze(1), batch_y)

        # 清除梯度
        optimizer.zero_grad()

        # 反向传播
        batch_loss.backward()

        # 更新模型参数
        optimizer.step()

        # 累加损失
        epoch_loss += batch_loss

    # 计算当前 epoch 的平均损失
    avg_loss = epoch_loss / len(dataloader)

    # 每 10 个 epoch 或第一个 epoch 打印一次损失
    if n % 10 == 0 or n == 1:
        print(f"epoches:{n}, loss:{avg_loss:.4f}")

        # 在每 10 个 epoch 保存一次模型的状态字典
        torch.save(model.state_dict(), 'model.pth')

# 训练完成后,加载保存的模型
model.load_state_dict(torch.load("model.pth"))

# 将模型切换到评估模式
model.eval()

# 测试数据
x_test = torch.tensor([[1.8]], dtype=torch.float32)  # 测试输入 1.8

# 使用模型进行预测
with torch.no_grad():  # 在预测时不计算梯度
    y_pre = model(x_test)

# 打印预测结果
print(y_pre)

结果:

相关推荐
霍格沃兹测试开发学社测试人社区7 小时前
新手指南:通过 Playwright MCP Server 为 AI Agent 实现浏览器自动化能力
运维·人工智能·自动化
JJJJ_iii7 小时前
【机器学习01】监督学习、无监督学习、线性回归、代价函数
人工智能·笔记·python·学习·机器学习·jupyter·线性回归
qq_4162764210 小时前
LOFAR物理频谱特征提取及实现
人工智能
余俊晖10 小时前
如何构造一个文档解析的多模态大模型?MinerU2.5架构、数据、训练方法
人工智能·文档解析
Akamai中国12 小时前
Linebreak赋能实时化企业转型:专业系统集成商携手Akamai以实时智能革新企业运营
人工智能·云计算·云服务
LiJieNiub13 小时前
读懂目标检测:从基础概念到主流算法
人工智能·计算机视觉·目标跟踪
weixin_5195357713 小时前
从ChatGPT到新质生产力:一份数据驱动的AI研究方向指南
人工智能·深度学习·机器学习·ai·chatgpt·数据分析·aigc
爱喝白开水a13 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
takashi_void14 小时前
如何在本地部署大语言模型(Windows,Mac,Linux)三系统教程
linux·人工智能·windows·macos·语言模型·nlp
OpenCSG14 小时前
【活动预告】2025斗拱开发者大会,共探支付与AI未来
人工智能·ai·开源·大模型·支付安全