基于Pytorch实现逻辑回归

yizhihongxing

基于PyTorch实现逻辑回归

逻辑回归是一种常用的分类算法,它可以用于二分类和多分类问题。在本文中,我们将介绍如何使用PyTorch实现逻辑回归,并提供两个示例说明。

示例1:使用鸢尾花数据集实现二分类逻辑回归

以下是一个使用鸢尾花数据集实现二分类逻辑回归的示例代码:

import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# Load iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Preprocess data
scaler = StandardScaler()
X = scaler.fit_transform(X)
y = (y == 0).astype(int)

# Split data into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Define logistic regression model
class LogisticRegression(nn.Module):
    def __init__(self):
        super(LogisticRegression, self).__init__()
        self.linear = nn.Linear(4, 1)

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

# Train logistic regression model
model = LogisticRegression()
criterion = nn.BCELoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)

for epoch in range(100):
    optimizer.zero_grad()
    y_pred = model(torch.Tensor(X_train))
    loss = criterion(y_pred, torch.Tensor(y_train).view(-1, 1))
    loss.backward()
    optimizer.step()

# Test logistic regression model
y_pred = model(torch.Tensor(X_test))
y_pred = (y_pred > 0.5).float()
accuracy = (y_pred == torch.Tensor(y_test).view(-1, 1)).float().mean()
print('Accuracy:', accuracy.item())

在这个示例中,我们首先加载鸢尾花数据集,并对数据进行预处理。然后,我们将数据集分成训练集和测试集,并定义一个LogisticRegression类来实现逻辑回归模型。在训练过程中,我们使用二元交叉熵损失函数和随机梯度下降优化器来训练模型。在测试过程中,我们使用训练好的模型对测试集进行预测,并计算模型的准确率。

示例2:使用MNIST数据集实现多分类逻辑回归

以下是一个使用MNIST数据集实现多分类逻辑回归的示例代码:

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision.datasets import MNIST
from torchvision.transforms import ToTensor
from torch.utils.data import DataLoader
from sklearn.preprocessing import StandardScaler

# Load MNIST dataset
train_dataset = MNIST(root='./data', train=True, transform=ToTensor(), download=True)
test_dataset = MNIST(root='./data', train=False, transform=ToTensor(), download=True)

# Preprocess data
scaler = StandardScaler()
X_train = scaler.fit_transform(train_dataset.data.reshape(-1, 784).numpy())
y_train = train_dataset.targets.numpy()
X_test = scaler.transform(test_dataset.data.reshape(-1, 784).numpy())
y_test = test_dataset.targets.numpy()

# Define logistic regression model
class LogisticRegression(nn.Module):
    def __init__(self):
        super(LogisticRegression, self).__init__()
        self.linear = nn.Linear(784, 10)

    def forward(self, x):
        x = self.linear(x)
        x = torch.softmax(x, dim=1)
        return x

# Train logistic regression model
model = LogisticRegression()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)

train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)

for epoch in range(10):
    for i, (images, labels) in enumerate(train_loader):
        optimizer.zero_grad()
        images = images.view(-1, 784)
        labels = labels
        y_pred = model(images)
        loss = criterion(y_pred, labels)
        loss.backward()
        optimizer.step()

# Test logistic regression model
correct = 0
total = 0
with torch.no_grad():
    for images, labels in test_loader:
        images = images.view(-1, 784)
        labels = labels
        y_pred = model(images)
        _, predicted = torch.max(y_pred.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print('Accuracy:', correct / total)

在这个示例中,我们首先加载MNIST数据集,并对数据进行预处理。然后,我们定义一个LogisticRegression类来实现多分类逻辑回归模型。在训练过程中,我们使用交叉熵损失函数和随机梯度下降优化器来训练模型。在测试过程中,我们使用训练好的模型对测试集进行预测,并计算模型的准确率。

总结

在本文中,我们介绍了如何使用PyTorch实现逻辑回归,并提供了两个示例说明。这些技术对于在深度学习中进行分类任务非常有用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Pytorch实现逻辑回归 - Python技术站

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

相关文章

  • PyTorch 之 强大的 hub 模块和搭建神经网络进行气温预测

    PyTorch之强大的hub模块和搭建神经网络进行气温预测 在PyTorch中,我们可以使用hub模块来加载预训练的模型,也可以使用它来分享和重用模型组件。在本文中,我们将介绍如何使用hub模块来加载预训练的模型,并使用它来搭建神经网络进行气温预测,并提供两个示例说明。 示例1:使用hub模块加载预训练的模型 以下是一个使用hub模块加载预训练的模型的示例代…

    PyTorch 2023年5月16日
    00
  • pytorch 两个GPU同时训练的解决方案

    在PyTorch中,可以使用DataParallel模块来实现在多个GPU上同时训练模型。在本文中,我们将介绍如何使用DataParallel模块来实现在两个GPU上同时训练模型,并提供两个示例,分别是使用DataParallel模块在两个GPU上同时训练一个简单的卷积神经网络和在两个GPU上同时训练ResNet模型。 使用DataParallel模块在两个…

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

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

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

    问题描述 在深度学习的过程中,会需要有调节学习率的需求,一种方式是直接通过手动的方式进行调节,即每次都保存一个checkpoint,但这种方式的缺点是需要盯着训练过程,会很浪费时间。因此需要设定自动更新学习率的方法,让模型自适应地调整学习率。 解决思路 通过epoch来动态调整,比如每10次学习率为原来的0.1 实现示例: def adjust_learni…

    PyTorch 2023年4月8日
    00
  • pytorch逐元素比较tensor大小实例

    PyTorch逐元素比较Tensor大小实例 在深度学习中,我们经常需要比较两个Tensor的大小。在PyTorch中,我们可以使用逐元素比较函数来比较两个Tensor的大小。在本文中,我们将介绍如何使用逐元素比较函数来比较两个Tensor的大小,并提供两个示例,分别是比较两个Tensor的大小和比较两个Tensor的大小并返回较大的那个Tensor。 比较…

    PyTorch 2023年5月15日
    00
  • PyTorch——(3) tensor基本运算

    @ 目录 矩阵乘法 tensor的幂 exp()/log() 近似运算 clamp() 截断 norm() 范数 max()/min() 最大最小值 mean() 均值 sun() 累加 prod() 累乘 argmax()/argmin() 最大最小值所在的索引 topk() 取最大的n个 kthvalue() 第k个小的值 比较运算 矩阵乘法 只对2d矩…

    2023年4月8日
    00
  • pytorch使用过程中遇到的一些问题

    问题一 ImportError: No module named torchvision torchvison:图片、视频数据和深度学习模型 解决方案 安装torchvision,参照官网 问题二 安装torchvision过程中遇到 Could not find a version that satisfies the requirement olefil…

    PyTorch 2023年4月8日
    00
  • Python Pytorch学习之图像检索实践

    Python PyTorch学习之图像检索实践 本文将介绍如何使用Python和PyTorch实现图像检索。我们将使用一个预训练的卷积神经网络模型来提取图像特征,并使用余弦相似度来计算图像之间的相似度。本文将分为以下几个部分: 数据集准备 模型准备 图像特征提取 图像检索 示例说明 数据集准备 我们将使用CIFAR-10数据集作为我们的图像数据集。CIFAR…

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