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

yizhihongxing

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实现更新部分网络,其他不更新

    在PyTorch中,我们可以使用nn.Module.parameters()函数来获取模型的所有参数,并使用nn.Module.named_parameters()函数来获取模型的所有参数及其名称。这些函数可以帮助我们实现更新部分网络,而不更新其他部分的功能。 以下是一个完整的攻略,包括两个示例说明。 示例1:更新部分网络 假设我们有一个名为model的模型…

    PyTorch 2023年5月15日
    00
  • PyTorch: 梯度下降及反向传播的实例详解

    PyTorch: 梯度下降及反向传播的实例详解 在PyTorch中,梯度下降和反向传播是训练神经网络的核心算法。本文将详细介绍这两个算法,并提供两个示例。 梯度下降 梯度下降是一种优化算法,用于最小化损失函数。在PyTorch中,我们可以使用torch.optim模块中的优化器来实现梯度下降。以下是一个简单的梯度下降示例: import torch impo…

    PyTorch 2023年5月16日
    00
  • minconda安装pytorch的详细方法

    Miniconda安装PyTorch的详细方法 在本文中,我们将介绍如何使用Miniconda安装PyTorch,并提供两个示例说明。 安装Miniconda 首先,我们需要从官方网站下载适用于您的操作系统的Miniconda安装程序,并按照提示进行安装。 创建虚拟环境 接下来,我们需要创建一个虚拟环境,以便在其中安装PyTorch。在终端中输入以下命令: …

    PyTorch 2023年5月16日
    00
  • requires_grad_()与requires_grad的区别,同时pytorch的自动求导(AutoGrad)

    1. 所有的tensor都有.requires_grad属性,可以设置这个属性.     x = tensor.ones(2,4,requires_grad=True) 2.如果想改变这个属性,就调用tensor.requires_grad_()方法:    x.requires_grad_(False) 3.自动求导注意点:   (1)  要想使x支持求导…

    PyTorch 2023年4月6日
    00
  • 【pytorch】制作网格图像,直接将tensor格式的图像保存到本地

    这是torchvision.utils模块里面的两个方法,因为比较常用,所以pytorch直接封装好了。 制作网格 网络图像一般用于训练数据或测试数据的可视化。 torchvision.utils.make_grid(tensor, nrow, padding) → torch.Tensor 描述 将多张tensor格式的图像以网格的方式封装到一起。 参数 …

    PyTorch 2023年4月7日
    00
  • Pytorch官方教程:用RNN实现字符级的生成任务

    数据处理 传送门:官方教程 数据从上面下载。本次的任务用到的数据和第一次一样,还是18个不同国家的不同名字。 但这次需要根据这些数据训练一个模型,给定国家和名字的首字母时,模型可以自动生成名字。   首先还是对数据进行预处理,和第一个任务一样,利用Unicode将不同国家的名字采用相同的编码方式,因为要生成名字,所以需要加上一个终止符,具体作用后面会提到。 …

    2023年4月8日
    00
  • pytorch模型的保存和加载、checkpoint操作

    PyTorch是一个非常流行的深度学习框架,它提供了丰富的工具和库来帮助我们进行深度学习任务。在本文中,我们将介绍如何保存和加载PyTorch模型,以及如何使用checkpoint操作来保存和恢复模型的状态。 PyTorch模型的保存和加载 在PyTorch中,我们可以使用torch.save和torch.load函数来保存和加载PyTorch模型。torc…

    PyTorch 2023年5月16日
    00
  • pytorch 实现情感分类问题小结

    PyTorch实现情感分类问题小结 情感分类是自然语言处理中的一个重要问题,它可以用来判断一段文本的情感倾向。本文将介绍如何使用PyTorch实现情感分类,并演示两个示例。 示例一:使用LSTM进行情感分类 在PyTorch中,我们可以使用LSTM模型进行情感分类。下面是一个简单的LSTM模型示例: import torch import torch.nn …

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