PyTorch零基础入门之逻辑斯蒂回归

PyTorch零基础入门之逻辑斯蒂回归

本文将介绍如何使用PyTorch实现逻辑斯蒂回归模型。逻辑斯蒂回归是一种二元分类模型,它可以用于预测一个样本属于两个类别中的哪一个。

1. 数据集

我们将使用Iris数据集进行逻辑斯蒂回归模型的训练和测试。该数据集包含150个样本,每个样本包含4个特征和1个标签。我们将使用前100个样本作为训练集,后50个样本作为测试集。

import pandas as pd
import numpy as np

# 加载数据集
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = pd.read_csv(url, names=names)

# 将标签转换为0和1
dataset['class'] = np.where(dataset['class'] == 'Iris-setosa', 0, 1)

# 将数据集分为训练集和测试集
train_dataset = dataset[:100]
test_dataset = dataset[100:]

2. 模型搭建

我们将使用PyTorch搭建一个简单的逻辑斯蒂回归模型。该模型包含一个线性层和一个sigmoid激活函数。

import torch.nn as nn

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

    def forward(self, x):
        x = self.linear(x)
        x = nn.functional.sigmoid(x)
        return x

model = LogisticRegression()

3. 模型训练

我们将使用二元交叉熵损失函数和随机梯度下降(SGD)优化器进行模型训练。我们将模型训练100个epoch,并在每个epoch结束时计算训练集和测试集的准确率。

import torch.optim as optim

# 定义损失函数和优化器
criterion = nn.BCELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 训练模型
for epoch in range(100):
    # 在训练集上训练模型
    train_correct = 0
    train_total = 0
    for index, row in train_dataset.iterrows():
        optimizer.zero_grad()
        inputs = torch.tensor(row[:4].values, dtype=torch.float32)
        label = torch.tensor(row[4], dtype=torch.float32)
        outputs = model(inputs)
        loss = criterion(outputs, label.unsqueeze(0))
        loss.backward()
        optimizer.step()
        predicted = torch.round(outputs)
        train_total += 1
        train_correct += (predicted == label).sum().item()

    # 在测试集上测试模型
    test_correct = 0
    test_total = 0
    with torch.no_grad():
        for index, row in test_dataset.iterrows():
            inputs = torch.tensor(row[:4].values, dtype=torch.float32)
            label = torch.tensor(row[4], dtype=torch.float32)
            outputs = model(inputs)
            predicted = torch.round(outputs)
            test_total += 1
            test_correct += (predicted == label).sum().item()

    # 打印准确率
    print(f'Epoch {epoch+1}, Train Accuracy: {train_correct/train_total}, Test Accuracy: {test_correct/test_total}')

4. 模型预测

我们使用训练好的模型来预测测试集中的样本,并将预测结果与实际结果进行比较。

# 预测测试集中的样本
with torch.no_grad():
    inputs = torch.tensor(test_dataset.iloc[0,:4].values, dtype=torch.float32)
    label = torch.tensor(test_dataset.iloc[0,4], dtype=torch.float32)
    outputs = model(inputs)
    predicted = torch.round(outputs).item()

# 打印预测结果和实际结果
print(f'Actual: {label}, Predicted: {predicted}')

示例2:使用GPU加速的逻辑斯蒂回归模型

如果你的机器上有GPU,你可以使用PyTorch的GPU加速功能来加速模型训练和预测。以下是使用GPU加速的逻辑斯蒂回归模型的示例代码。

import torch.nn as nn

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

    def forward(self, x):
        x = self.linear(x)
        x = nn.functional.sigmoid(x)
        return x

model = LogisticRegression().cuda()

# 定义损失函数和优化器
criterion = nn.BCELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 训练模型
for epoch in range(100):
    # 在训练集上训练模型
    train_correct = 0
    train_total = 0
    for index, row in train_dataset.iterrows():
        optimizer.zero_grad()
        inputs = torch.tensor(row[:4].values, dtype=torch.float32).cuda()
        label = torch.tensor(row[4], dtype=torch.float32).cuda()
        outputs = model(inputs)
        loss = criterion(outputs, label.unsqueeze(0))
        loss.backward()
        optimizer.step()
        predicted = torch.round(outputs)
        train_total += 1
        train_correct += (predicted == label).sum().item()

    # 在测试集上测试模型
    test_correct = 0
    test_total = 0
    with torch.no_grad():
        for index, row in test_dataset.iterrows():
            inputs = torch.tensor(row[:4].values, dtype=torch.float32).cuda()
            label = torch.tensor(row[4], dtype=torch.float32).cuda()
            outputs = model(inputs)
            predicted = torch.round(outputs)
            test_total += 1
            test_correct += (predicted == label).sum().item()

    # 打印准确率
    print(f'Epoch {epoch+1}, Train Accuracy: {train_correct/train_total}, Test Accuracy: {test_correct/test_total}')

# 预测测试集中的样本
with torch.no_grad():
    inputs = torch.tensor(test_dataset.iloc[0,:4].values, dtype=torch.float32).cuda()
    label = torch.tensor(test_dataset.iloc[0,4], dtype=torch.float32).cuda()
    outputs = model(inputs)
    predicted = torch.round(outputs).item()

# 打印预测结果和实际结果
print(f'Actual: {label}, Predicted: {predicted}')

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyTorch零基础入门之逻辑斯蒂回归 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • pytorch保存模型等相关参数,利用torch.save(),以及读取保存之后的文件

    转载自: https://www.cnblogs.com/qinduanyinghua/p/9311410.html 假设网络为model = Net(), optimizer = optim.Adam(model.parameters(), lr=args.lr), 假设在某个epoch,我们要保存模型参数,优化器参数以及epoch 一、 1. 先建立一个…

    PyTorch 2023年4月8日
    00
  • PyTorch CUDA环境配置及安装的步骤(图文教程)

    PyTorch CUDA环境配置及安装的步骤(图文教程) PyTorch 是一个广泛使用的深度学习框架,支持 GPU 加速。在使用 PyTorch 进行深度学习模型训练时,我们通常需要配置 CUDA 环境。本文将详细讲解 PyTorch CUDA 环境配置及安装的步骤,并提供两个示例说明。 1. 安装 CUDA 首先,我们需要安装 CUDA。在安装 CUDA…

    PyTorch 2023年5月16日
    00
  • YOLOV5代码详解之损失函数的计算

    YOLOV5是一种目标检测算法,其核心是计算损失函数。本文将详细讲解YOLOV5代码中损失函数的计算过程,并提供两个示例说明。 损失函数的计算 YOLOV5中的损失函数由三部分组成:置信度损失、分类损失和坐标损失。下面将分别介绍这三部分的计算过程。 置信度损失 置信度损失用于衡量模型对目标的检测能力。在YOLOV5中,置信度损失由两部分组成:有目标的置信度损…

    PyTorch 2023年5月15日
    00
  • Pytorch 实现权重初始化

    PyTorch实现权重初始化 在PyTorch中,我们可以使用不同的方法来初始化神经网络的权重。在本文中,我们将介绍如何使用PyTorch实现权重初始化,并提供两个示例说明。 示例1:使用torch.nn.init函数初始化权重 以下是一个使用torch.nn.init函数初始化权重的示例代码: import torch import torch.nn as…

    PyTorch 2023年5月16日
    00
  • pytorch中的广播语义

    PyTorch中的广播语义 在本文中,我们将介绍PyTorch中的广播语义。广播语义是一种机制,它允许在不同形状的张量之间进行操作,而无需显式地扩展它们的形状。这使得我们可以更方便地进行张量运算,提高代码的可读性和简洁性。 示例一:使用广播语义进行张量运算 我们可以使用广播语义进行张量运算。示例代码如下: import torch # 创建张量 a = to…

    PyTorch 2023年5月15日
    00
  • pytorch 在sequential中使用view来reshape的例子

    在PyTorch中,我们可以使用Sequential模块来构建神经网络。Sequential模块允许我们按照顺序添加一系列的层,从而构建一个完整的神经网络。在Sequential模块中,我们可以使用view函数来对张量进行reshape操作,以适应不同的层的输入和输出形状。 以下是两个使用Sequential模块和view函数的示例: 示例1:使用Seque…

    PyTorch 2023年5月15日
    00
  • Pytorch实现神经网络的分类方式

    PyTorch实现神经网络的分类方式 在PyTorch中,我们可以使用神经网络来进行分类任务。本文将详细介绍如何使用PyTorch实现神经网络的分类方式,并提供两个示例。 二分类 在二分类任务中,我们需要将输入数据分为两个类别。以下是一个简单的二分类示例: import torch import torch.nn as nn # 实例化模型 model = …

    PyTorch 2023年5月16日
    00
  • Pytorch中的广播机制详解(Broadcast)

    PyTorch中的广播机制详解(Broadcast) 在PyTorch中,广播机制(Broadcast)是一种非常重要的机制,它可以使得不同形状的张量进行数学运算。本文将详细介绍PyTorch中的广播机制,包括广播规则、广播示例和广播注意事项等。 广播规则 广播机制是一种自动扩展张量形状的机制,使得不同形状的张量可以进行数学运算。在PyTorch中,广播规则…

    PyTorch 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部