吴恩达2022机器学习专项课程C2W2:2.22 多类 softmax softmax与神经网络 softmax的代码改良 多标签分类

本文主要是介绍吴恩达2022机器学习专项课程C2W2:2.22 多类 softmax softmax与神经网络 softmax的代码改良 多标签分类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 多分类问题
    • 1.什么是多分类问题
    • 2.多分类问题案例
    • 3.二分类与多分类的区别
  • Softmax
    • 1. 什么是Softmax
    • 2.逻辑回归预测的计算过程
    • 3. Softmax预测的计算过程
    • 4.Softmax 回归与逻辑回归的关系
    • 5. Softmax的损失函数
  • softmax与神经网络
    • 1.设置Softmax层
    • 2.Softmax层的计算
    • 3.softmax激活函数与其它激活函数的区别
    • 4.TensorFlow实现Softmax神经网络
  • softmax的代码改良
    • 1.简述
    • 2.数值舍入误差案例
    • 3.逻辑回归的数值舍入误差
    • 4.改良逻辑回归的数值舍入误差
    • 5.改良softmax的数值舍入误差
    • 5.具体的改良代码
  • 多标签分类问题
    • 1.什么是多标签分类?
    • 2.多类分类和多标签分类的区别
    • 3.建立多标签分类的神经网络
  • 总结

多分类问题

1.什么是多分类问题

多分类问题指的是在分类任务中,输出标签y不仅仅局限于两个类别,而是存在两个以上的可能类别。

2.多分类问题案例

  • 手写数字分类:仅区分手写数字0和1。
  • 邮政编码识别:涉及10个可能的数字类别。
  • 疾病诊断:判断病人可能患有三种或五种不同的疾病。
  • 视觉缺陷检测:判断药片是否存在刮痕、变色或破损等缺陷,对药片进行不同缺陷分类。

3.二分类与多分类的区别

  • 二分类问题:逻辑回归模型预测给定特征x条件下y为1的概率。
  • 多分类问题:需要预测y等于1、2、3、4等多个概率。多分类算法能够在空间中学习到一个决策边界,将空间划分为多个区域。在这里插入图片描述

Softmax

1. 什么是Softmax

它是一种函数,可以理解成逻辑回归模型的扩展,用于预测多分类问题,类似于sigmoid预测二分类。

2.逻辑回归预测的计算过程

首先计算z=wx+b,然后通过sigmoid函数得到a=g(z)。它意味着在给定输入特征x的情况下y=1的概率,如果y=1的概率为0.71,则y=0的概率为0.29(1-0.71)。
在这里插入图片描述

3. Softmax预测的计算过程

当y可以取四个可能的输出值(1234),softmax会如何操作?
(1)参数:这里的w1,w2,w3,w4和b1,b2,b3,b4是softmax回归的参数。

在这里插入图片描述

(2)计算公式(激活函数):分母都是一样的,从ez1加到ez4。分子是不断更换。我们可以理解成给定输入特征x的情况下,a1表示y=1的概率,a2表示y=2的概率,a3表示y=3的概率,a4表示y=4的概率。这4个概率的和也要等于1(0.30+0.20+0.15+0.35=1)。

在这里插入图片描述

(3)softmax的一般情况:上述的y只有4种情况即y=1,2,3,4,而一般情况下,y可以取n个值,即y=1,2,3,4…n。j的范围是1到n,aj理解为在给定输入特征x的情况下,y=j的概率。注意,a1到an的和要为1,因为概率总体和为1。

在这里插入图片描述

4.Softmax 回归与逻辑回归的关系

如果n为2,则softmax的计算结果和逻辑回归的计算结果相同,只是两者的参数不同。

5. Softmax的损失函数

(1)逻辑回归的损失函数:可以将1-a1简化成a2。因此当y=1时,损失函数为-loga1。如果y=0时,损失函数为-loga2。
在这里插入图片描述

(2)Softmax 回归的损失函数:根据真实标签y,选择对应的损失函数计算损失,例如y=2,计算-loga2,损失越接近1,表示模型预测分类的效果越好,因此算法会尽力让计算的值趋近于1。softmax的每个预测概率都在0-1之间在这里插入图片描述

softmax与神经网络

1.设置Softmax层

之前,我们使用了两类别的手写数字识别神经网络。现在,为了分类0到9的手写数字,我们需要将输出层调整为10个单元,并将其设为Softmax输出层。在这里插入图片描述

2.Softmax层的计算

输出层的每个神经元使用softmax的激活函数,神经元分别输出y=1~10的概率。在这里插入图片描述

3.softmax激活函数与其它激活函数的区别

对于Softmax激活函数,每个激活值(如a1)依赖于所有的Z值(Z1到Z10)。计算a1时,需要用到所有的Z值,而不是只用Z1。对于sigmoid、ReLU或线性激活函数,每个激活值是独立计算的。例如,a1只依赖于Z1,a2只依赖于Z2。
在这里插入图片描述

4.TensorFlow实现Softmax神经网络

(1) 定义网络结构:第一层有25个单元,激活函数为ReLU。第二层有15个单元,激活函数也为ReLU。第三层有10个输出单元,使用Softmax激活函数。

(2) 选择损失函数:使用SparseCategoricalCrossentropy函数作为损失函数,适用于多类别分类问题。它可以让每个输入样本只属于一个类别,不会一个图像即出现又2又是7的情况。

(3)训练模型:训练模型的步骤与之前类似。
在这里插入图片描述

softmax的代码改良

1.简述

上述TensorFlow实现Softmax神经网络的方法是正确的,但改用一种能减少舍入误差的方法,可以在 TensorFlow中更准确地进行计算。

2.数值舍入误差案例

先用数学演示两种计算方法,直接计算(option1)比通过复杂表达式(option2)计算有更少的舍入误差。
在这里插入图片描述
代码也证明了这点,在计算机中,(1 + 1/10000) - (1 - 1/10000) 计算的结果可能不是精确的2/10000,而是一个有误差的值。
在这里插入图片描述

3.逻辑回归的数值舍入误差

(1)直接使用a计算
损失函数中直接使用 a,在计算a时已经引入了舍入误差,这个过程类似计算1 + 1/10000 和 1 - 1/10000。

在这里插入图片描述

(2)使用展开a计算

  • 直接在损失函数中使用a的原始公式1 / (1 + e^(-z)),不显式计算 a。这种方法类似于直接计算 2/10000,因为TensorFlow可以在内部优化这些计算,减少舍入误差。在这里插入图片描述

4.改良逻辑回归的数值舍入误差

  • 首先要将输出层修改为线性激活,然后设置from_logits=True,意思是告诉我TensorFlow输出层未经过激活函数(线性激活),使其在内部使用逻辑回归处理 logits 值(即 z),这样TensorFlow可以重新排列项来减少数值舍入误差,提高计算精度。在这里插入图片描述

5.改良softmax的数值舍入误差

过程和逻辑回归的一样,只是内部使用softmax函数计算z。
在这里插入图片描述

5.具体的改良代码

(1)softmax
神经网络的最终输出不再是激活值a,而是线性激活z(wx+b),然后我们需要让输出z使用softmax计算,才能得到最终想要的结果。
在这里插入图片描述(2)逻辑回归
同理,输出的是线性激活z,因此需要z使用sigmoid计算,得到最终结果。
在这里插入图片描述

多标签分类问题

1.什么是多标签分类?

每个样本可能有多个标签,每个标签表示不同的类别。例如自动驾驶系统中,针对前方的图片,可能要判断是否有车、是否有公交车、是否有行人等。这种情况下,每张图像可以同时属于多个标签,单一标签无法描述图像中所有的信息。
在这里插入图片描述

2.多类分类和多标签分类的区别

  • 在多类分类中:目标 Y 是一个单个的数字,比如手写数字分类中的Y 可能是 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 中的一个。
  • 在多标签分类中:目标Y是一个由多个数字组成的向量,比如 [1, 0, 1],表示图像中有车,没有公交车,有行人。

3.建立多标签分类的神经网络

由于需要解决三个二分类问题(是否有车、是否有公交车、是否有行人),可以在输出层的这三个神经元使用 sigmoid 激活函数。因此,输出向量的3个元素将分别表示图像中是否有车、是否有公交车和是否有行人。
在这里插入图片描述

总结

本篇首先引入了多分类问题,然后介绍了解决多分类的算法:softmax,softmax可以理解为逻辑回归的扩展。通过对比逻辑回归,介绍了softmax的预测过程和损失函数,又将softmax引入神经网络,使我们看到了神经网络使用softmax作为输出层的预测。随后我们又引入了代码改良,通过设置输出层为线性激活,以及在编译模型时设置from_logits=True,来减小误差,增加预测的精度。最后介绍了多类分类与多标签分类。

这篇关于吴恩达2022机器学习专项课程C2W2:2.22 多类 softmax softmax与神经网络 softmax的代码改良 多标签分类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1007338

相关文章

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

jupyter代码块没有运行图标的解决方案

《jupyter代码块没有运行图标的解决方案》:本文主要介绍jupyter代码块没有运行图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录jupyter代码块没有运行图标的解决1.找到Jupyter notebook的系统配置文件2.这时候一般会搜索到

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

CSS去除a标签的下划线的几种方法

《CSS去除a标签的下划线的几种方法》本文给大家分享在CSS中,去除a标签(超链接)的下划线的几种方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧... 在 css 中,去除a标签(超链接)的下划线主要有以下几种方法:使用text-decoration属性通用选择器设置:使用a标签选择器,将tex

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优