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

python 复制代码
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import Dataset, DataLoader
import torchvision.transforms as transforms
import pandas as pd
import numpy as np
class CustomDataset(Dataset):
    def __init__(self, data, labels, transform=None):
        self.data = data
        self.labels = labels
        self.transform = transform

    def __len__(self):
        return len(self.data)

    def __getitem__(self, idx):
        sample = self.data[idx]
        label = self.labels[idx]
        if self.transform:
            sample = self.transform(sample)
        return sample, label
# 示例数据
data = np.random.rand(100, 10)  # 100个样本,每个样本10个特征
labels = np.random.randint(0, 2, 100)  # 二分类标签

# 转换为torch的Tensor
data = torch.tensor(data, dtype=torch.float32)
labels = torch.tensor(labels, dtype=torch.long)

# 创建数据集和数据加载器
dataset = CustomDataset(data, labels)
dataloader = DataLoader(dataset, batch_size=16, shuffle=True)


class LogisticRegression(nn.Module):
    def __init__(self, input_dim):
        super(LogisticRegression, self).__init__()
        self.linear = nn.Linear(input_dim, 1)

    def forward(self, x):
        out = torch.sigmoid(self.linear(x))
        return out


# 参数设置
input_dim = data.shape[1]
num_epochs = 20
learning_rate = 0.01

# 初始化模型、损失函数和优化器
model = LogisticRegression(input_dim)
criterion = nn.BCELoss()
optimizer = optim.SGD(model.parameters(), lr=learning_rate)

# 训练模型
for epoch in range(num_epochs):
    for inputs, labels in dataloader:
        # 将标签转换为浮点型
        labels = labels.float().unsqueeze(1)

        # 前向传播
        outputs = model(inputs)
        loss = criterion(outputs, labels)

        # 反向传播和优化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

    print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}')
# 保存模型权重和架构
torch.save(model.state_dict(), 'logistic_regression_model.pth')

# 加载模型
loaded_model = LogisticRegression(input_dim)
loaded_model.load_state_dict(torch.load('logistic_regression_model.pth'))
loaded_model.eval()  # 切换为评估模式

# 进行预测
with torch.no_grad():
    sample = torch.tensor(np.random.rand(1, 10), dtype=torch.float32)  # 一个新的样本
    prediction = loaded_model(sample)
    print(f'Prediction: {prediction.item()}')
相关推荐
行然梦实3 分钟前
TOPSIS(Technique for Order Preference by Similarity to Ideal Solution )简介与简单示例
人工智能·算法·机器学习·数学建模
机器觉醒时代12 分钟前
具身智能VLA困于“数据泥潭”,人类活动视频数据是否是“破局之钥”?
人工智能·具身智能·vla模型
Godspeed Zhao14 分钟前
自动驾驶中的传感器技术14——Camera(5)
人工智能·机器学习·自动驾驶·camera·摄像头
音视频牛哥14 分钟前
智能感知的新入口:AIGC 与低延迟视频通路的深度融合
人工智能·计算机视觉·aigc·音视频·大牛直播sdk·aigc实时·aigc rtsp
dlraba80227 分钟前
逻辑回归----银行贷款模型优化
算法·机器学习·逻辑回归
Fine姐31 分钟前
数据挖掘2.1&2.2 分类和线性判别器&确定线性可分性
人工智能·分类·数据挖掘
倔强青铜三42 分钟前
GIL竟是Python命中注定的解药?统治AI时代的核心秘密!
人工智能·python·ai编程
倔强青铜三1 小时前
大揭秘!Python类没有真正私有属性的原因
人工智能·python·ai编程
stars1 小时前
数字人开发02--前端服务配置
前端·人工智能
好多渔鱼好多1 小时前
【语音技术】意图与语料
人工智能·智能家居·智能互联·语音技术·影音开发·意图