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 不同学习率设置方法

    最近注意到在一些caffe模型中,偏置项的学习率通常设置为普通层的两倍。具体原因可以参考(https://datascience.stackexchange.com/questions/23549/why-is-the-learning-rate-for-the-bias-usually-twice-as-large-as-the-the-lr-for-t)…

    2023年4月6日
    00
  • PyTorch实现Seq2Seq机器翻译

    Seq2Seq简介 Seq2Seq由Encoder和Decoder组成,Encoder和Decoder又由RNN构成。Encoder负责将输入编码为一个向量。Decoder根据这个向量,和上一个时间步的预测结果作为输入,预测我们需要的内容。 Seq2Seq在训练阶段和预测阶段稍有差异。如果Decoder第一个预测预测的输出就错了,它会导致“蝴蝶效应“,影响后…

    2023年4月8日
    00
  • pytorch的visdom启动不了、蓝屏

    pytorch的visdom启动不了、蓝屏     问题描述:我是在ubuntu16。04上用python3.5安装的visdom。可是启动是蓝屏:在网上找了很久的解决方案:有三篇博文:      https://blog.csdn.net/qq_22194315/article/details/78827185 https://blog.csdn.net/…

    PyTorch 2023年4月8日
    00
  • pytorch框架的详细介绍与应用详解

    下面是关于“PyTorch框架的详细介绍与应用详解”的完整攻略。 PyTorch简介 PyTorch是一个基于Python的科学计算库,它提供了两个高级功能:张量计算和深度学习。PyTorch的张量计算功能类似于NumPy,但可以在GPU上运行,这使得它非常适合于深度学习。PyTorch的深度学习功能包括自动求导、动态计算图和模型部署等功能。PyTorch的…

    PyTorch 2023年5月15日
    00
  • pytorch 计算ConvTranspose1d输出特征大小方式

    在PyTorch中,ConvTranspose1d是一种用于进行一维卷积转置操作的函数。在进行卷积转置操作时,我们需要计算输出特征的大小。本文将对PyTorch中计算ConvTranspose1d输出特征大小的方法进行详细讲解,并提供两个示例说明。 1. 计算ConvTranspose1d输出特征大小的方法 在PyTorch中,计算ConvTranspose…

    PyTorch 2023年5月15日
    00
  • 基于Pytorch版yolov5的滑块验证码破解思路详解

    以下是基于PyTorch版yolov5的滑块验证码破解思路详解。 简介 滑块验证码是一种常见的人机验证方式,它通过让用户拖动滑块来验证用户的身份。本文将介绍如何使用PyTorch版yolov5来破解滑块验证码。 步骤 步骤1:数据收集 首先,我们需要收集一些滑块验证码数据。我们可以使用Selenium等工具来模拟用户操作,从而收集大量的滑块验证码数据。 步骤…

    PyTorch 2023年5月15日
    00
  • pytorch下载太慢的解决办法

    https://blog.csdn.net/qq_41936559/article/details/102699082

    PyTorch 2023年4月7日
    00
  • pytorch中动态调整学习率

    https://blog.csdn.net/bc521bc/article/details/85864555 这篇bolg说的很详细了,但是具体在代码中怎么用还是有点模糊。自己试验了一下,顺路记一下,其实很简单,在optimizer后面定义一下,然后在每个epoch中step一下就可以了。一开始出错是因为我把step放到 T_optimizer.step()…

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