基于Pytorch实现逻辑回归

基于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自动求解梯度

    要理解Pytorch求解梯度,首先需要理解Pytorch当中的计算图的概念,在计算图当中每一个Variable都代表的一个节点,每一个节点就可以代表一个神经元,我们只有将变量放入节点当中才可以对节点当中的变量求解梯度,假设我们有一个矩阵: 1., 2., 3. 4., 5., 6. 我们将这个矩阵(二维张量)首先在Pytorch当中初始化,并且将其放入计算图…

    PyTorch 2023年4月8日
    00
  • pytorch 如何自定义卷积核权值参数

    PyTorch自定义卷积核权值参数 在PyTorch中,我们可以自定义卷积核权值参数。本文将介绍如何自定义卷积核权值参数,并提供两个示例。 示例一:自定义卷积核权值参数 我们可以使用nn.Parameter()函数创建可训练的权值参数。可以使用以下代码创建自定义卷积核权值参数: import torch import torch.nn as nn class…

    PyTorch 2023年5月15日
    00
  • 使用pytorch测试单张图片(test single image with pytorch)

    以下代码实现使用pytorch测试一张图片 引用文章: https://www.learnopencv.com/pytorch-for-beginners-image-classification-using-pre-trained-models/ from __future__ import print_function, division from PI…

    PyTorch 2023年4月7日
    00
  • Linux下PyTorch安装的方法是什么

    这篇文章主要讲解了“Linux下PyTorch安装的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux下PyTorch安装的方法是什么”吧! 一、PyTorch简介 PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。2017年1月,由Facebook…

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

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

    PyTorch 2023年5月15日
    00
  • Pytorch加载.pth文件

    1. .pth文件 (The weights of the model have been saved in a .pth file, which is nothing but a pickle file of the model’s tensor parameters. We can load those into resnet18 using the m…

    2023年4月7日
    00
  • pytorch中Math operation操作:torch.ger()

    torch.ger(vec1, vec2, out=None) → Tensor Outer product of vec1 and vec2. If vec1 is a vector of size . Parameters: vec1 (Tensor) – 1-D input vector vec2 (Tensor) – 1-D input vector…

    PyTorch 2023年4月8日
    00
  • Pytorch 加载保存模型,进行模型推断【直播】2019 年县域农业大脑AI挑战赛—(三)保存结果

    在模型训练结束,结束后,通常是一个分割模型,输入 1024×1024 输出 4x1024x1024。 一种方法就是将整个图切块,然后每张预测,但是有个不好处就是可能在边界处断续。   由于这种切块再预测很ugly,所以直接遍历整个图预测(这就是相当于卷积啊),防止边界断续,还有一个问题就是防止图过大不能超过20M。 很有意思解决上边的问题。话也不多说了。直接…

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