吴恩达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

相关文章

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

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

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