美文网首页
PyTorch系列三:逻辑回归

PyTorch系列三:逻辑回归

作者: 八宝粥BBZ | 来源:发表于2019-02-01 17:42 被阅读2次

1.介绍

  • logistic回归是一种广义线性回归,因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w'x+b,其中w和b是待求参数,其区别在于他们的因变量不同,多重线性回归直接将w‘x+b作为因变量,即y =w'x+b,而logistic回归则通过函数L将w‘x+b对应一个隐状态p,p =L(w'x+b),然后根据p 与1-p的大小决定因变量的值。如果L是logistic函数,就是logistic回归,如果L是多项式函数就是多项式回归。
  • logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释,多类可以使用softmax方法进行处理。实际中最为常用的就是二分类的logistic回归。

2.模型训练

# -*- coding: utf-8 -*-

import torch
from torch import nn, optim
import torch.nn.functional as F
from torch.autograd import Variable
from torch.utils.data import DataLoader
from torchvision import transforms
from torchvision import datasets

import time

# 定义超参数
batch_size    = 32
num_epoches   = 10
learning_rate = 1e-3

# 下载训练集 MNIST 手写数字训练集
train_dataset = datasets.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True)
test_dataset  = datasets.MNIST(root='./data', train=False, transform=transforms.ToTensor())

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

class Logstic_Regression(nn.Module):
    """逻辑回归模型定义"""

    def __init__(self, in_dim, n_class):
        super(Logstic_Regression, self).__init__()
        self.logstic = nn.Linear(in_dim, n_class)

    def forward(self, x):
        # 前向传播
        output = self.logstic(x)
        return output

# 模型初始化
model = Logstic_Regression(28 * 28, 10)  # 图片大小是28x28

# 定义loss和optimizer
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=learning_rate)

# 模型训练
for epoch in range(num_epoches):
    print '#' * 45
    print 'Epoch {}'.format(epoch + 1)
    since = time.time()
    running_loss = 0.0
    running_acc  = 0.0
    for i, data in enumerate(train_loader, 1):
        img, label = data
        img = img.view(img.size(0), -1)

        img   = Variable(img)
        label = Variable(label)

        # 前向传播
        out = model(img)
        loss = criterion(out, label)
        running_loss += loss.item() * label.size(0)
        _, pred = torch.max(out, 1)
        num_correct = (pred == label).sum()
        running_acc += num_correct.item()

        # 后向传播
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        if i % 300 == 0:
            print '[{}/{}] Loss: {:.6f}, Acc: {:.6f}'.format(
                epoch + 1, num_epoches, running_loss / (batch_size * i),
                running_acc / (batch_size * i))
    print 'Finish {} epoch, Loss: {:.6f}, Acc: {:.6f}'.format(
        epoch + 1, running_loss / (len(train_dataset)), running_acc / (len(
            train_dataset)))

    # 模型评估
    model.eval()
    eval_loss = 0.
    eval_acc  = 0.
    for data in test_loader:
        img, label = data
        img = img.view(img.size(0), -1)

        with torch.no_grad():
            img   = Variable(img)
            label = Variable(label)

        out  = model(img)
        loss = criterion(out, label)
        eval_loss += loss.item() * label.size(0)
        _, pred = torch.max(out, 1)
        num_correct = (pred == label).sum()
        eval_acc += num_correct.item()
    print 'Test Loss: {:.6f}, Acc: {:.6f}'.format(eval_loss / (len(
        test_dataset)), eval_acc / (len(test_dataset)))
    print 'Time:{:.1f} s'.format(time.time() - since)

# 模型保存
torch.save(model.state_dict(), './Logistic_Regression.model')

相关文章

  • PyTorch系列三:逻辑回归

    1.介绍 logistic回归是一种广义线性回归,因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,...

  • Pytorch 任务三

    使用pytorch实现逻辑回归:

  • ML梳理02 | 线性回归、逻辑回归

    关于线回归、逻辑回归,各位大神总结的很精辟了,下面收藏几个好的讲解,以备忘。 逻辑回归三部曲 机器学习系列(1)_...

  • Pytorch学习记录-逻辑回归

    1. 引入必须库&设定超参数 一样的套路 2. 获取数据和加载数据 3. 构建逻辑回归模型 这里有一个问题,为什么...

  • pytorch autograd与逻辑回归

    一、torch.autograd 自动求导 1.backward方法 每次反向传播时,计算图都会被释放掉。reta...

  • 机器学习实践系列3——二项逻辑回归

    本文主要介绍逻辑回归的基本概念,并结合实际案例说明逻辑回归的应用。 从线性回归到逻辑回归 在【机器学习系列2——线...

  • 回归系列之逻辑回归

    逻辑回归是回归系列中一个分类模型,而且是一个二分类模型。逻辑回归模型简单但应用广泛,本文从模型介绍、适用场景以及优...

  • PyTorch系列二:线性回归

    1.介绍 线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十...

  • PyTorch搭建逻辑回归模型进行分类

    PyTorch搭建逻辑回归模型进行分类 1)理论基础 Logistic起源于对人口数量增长情况的研究,后来又被应用...

  • Pytorch实现共享单车数量预测

    之前分享过Pytorch实现简单线性回归算法的内容:Pytorch实现简单的线性回归算法,这次分享一下用pytor...

网友评论

      本文标题:PyTorch系列三:逻辑回归

      本文链接:https://www.haomeiwen.com/subject/zaudsqtx.html