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

 更新时间:2021年10月19日 10:47:57   作者:山顶夕景  
PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序,它是一个可续计算包,提供两个高级功能:1、具有强大的GPU加速的张量计算(如NumPy)。2、包含自动求导系统的深度神经网络

学习总结

(1)和上一讲的模型训练是类似的,只是在线性模型的基础上加个sigmoid,然后loss函数改为交叉熵BCE函数(当然也可以用其他函数),另外一开始的数据y_data也从数值改为类别0和1(本例为二分类,注意x_datay_data这里也是矩阵的形式)。

一、sigmoid函数

logistic function是一种sigmoid函数(还有其他sigmoid函数),但由于使用过于广泛,pytorch默认logistic function叫为sigmoid函数。还有如下的各种sigmoid函数:

在这里插入图片描述

二、和Linear的区别

逻辑斯蒂和线性模型的unit区别如下图:

在这里插入图片描述

sigmoid函数是不需要参数的,所以不用对其初始化(直接调用nn.functional.sigmoid即可)。
另外loss函数从MSE改用交叉熵BCE:尽可能和真实分类贴近。

在这里插入图片描述

如下图右方表格所示,当 y ^ \hat{y} y^​越接近y时则BCE Loss值越小。

在这里插入图片描述

三、逻辑斯蒂回归(分类)PyTorch实现

# -*- coding: utf-8 -*-
"""
Created on Mon Oct 18 08:35:00 2021

@author: 86493
"""
import torch
import torch.nn as nn
import matplotlib.pyplot as plt  
import torch.nn.functional as F
import numpy as np

# 准备数据
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[0], [0], [1]])


losslst = []

class LogisticRegressionModel(nn.Module):
    def __init__(self):
        super(LogisticRegressionModel, self).__init__()
        self.linear = torch.nn.Linear(1, 1)
        
    def forward(self, x):
    	# 和线性模型的网络的唯一区别在这句,多了F.sigmoid
        y_predict = F.sigmoid(self.linear(x))
        return y_predict
    
model = LogisticRegressionModel()

# 使用交叉熵作损失函数
criterion = torch.nn.BCELoss(size_average = False)
optimizer = torch.optim.SGD(model.parameters(), 
                            lr = 0.01)

# 训练
for epoch in range(1000):
    y_predict = model(x_data)
    loss = criterion(y_predict, y_data)
    # 打印loss对象会自动调用__str__
    print(epoch, loss.item())
    losslst.append(loss.item())
    # 梯度清零后反向传播
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

# 画图
plt.plot(range(1000), losslst)
plt.ylabel('Loss')
plt.xlabel('epoch')
plt.show()


# test
# 每周学习的时间,200个点
x = np.linspace(0, 10, 200)
x_t = torch.Tensor(x).view((200, 1))
y_t = model(x_t)
y = y_t.data.numpy()
plt.plot(x, y)
# 画 probability of pass = 0.5的红色横线
plt.plot([0, 10], [0.5, 0.5], c = 'r')
plt.xlabel('Hours')
plt.ylabel('Probability of Pass')
plt.grid()
plt.show()

在这里插入图片描述

可以看出处于通过和不通过的分界线是Hours=2.5。

在这里插入图片描述

Reference

pytorch官方文档

到此这篇关于PyTorch零基础入门之逻辑斯蒂回归的文章就介绍到这了,更多相关PyTorch 逻辑斯蒂回归内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解使用Python下载文件的几种方法

    详解使用Python下载文件的几种方法

    这篇文章主要介绍了详解使用Python下载文件的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Python Pandas中布尔索引的用法详解

    Python Pandas中布尔索引的用法详解

    布尔索引是一种使用 DataFrame 中数据的实际值的索引。本文将通过一些示例为大家详细讲讲Python中布尔索引的用法,需要的可以参考一下
    2022-08-08
  • Django中如何使用celery异步发送短信验证码详解

    Django中如何使用celery异步发送短信验证码详解

    Celery是Python开发的分布式任务调度模块,这篇文章主要给大家介绍了关于Django中如何使用celery异步发送短信验证码的相关资料,主要内容包括基础介绍、工作原理、完整代码等方面,需要的朋友可以参考下
    2021-09-09
  • 浅谈DataFrame和SparkSql取值误区

    浅谈DataFrame和SparkSql取值误区

    今天小编就为大家分享一篇浅谈DataFrame和SparkSql取值误区,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python实现批量解压文件夹下所有压缩包

    Python实现批量解压文件夹下所有压缩包

    这篇文章主要为大家详细介绍了如何使用Python实现批量解压文件夹下所有压缩包,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-02-02
  • 对Python Class之间函数的调用关系详解

    对Python Class之间函数的调用关系详解

    今天小编就为大家分享一篇对Python Class之间函数的调用关系详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python3中列表list合并的四种方法

    Python3中列表list合并的四种方法

    这篇文章主要介绍了Python3中列表list合并的四种方法,文章结尾对每种方法做了总结,需要的朋友可以参考下
    2019-04-04
  • 解决pip安装报错required to install pyproject.toml-based projects问题

    解决pip安装报错required to install pyproject.toml-based projec

    这篇文章主要介绍了解决pip安装报错required to install pyproject.toml-based projects问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Python使用VIF实现检测多重共线性

    Python使用VIF实现检测多重共线性

    多重共线性是指多元回归模型中有两个或两个以上的自变量,它们之间具有高度的相关性,本文主要介绍了如何使用VIF实现检测多重共线性,需要的可以参考下
    2023-12-12
  • python写的一个文本编辑器

    python写的一个文本编辑器

    这篇文章主要介绍了python写的一个文本编辑器,大家参考使用吧
    2014-01-01

最新评论