吴恩达机器学习-可选实验室:Softmax函数

文章目录

    • Cost
    • Tensorflow
    • 稀疏类别交叉熵或类别交叉熵
    • 祝贺

在这个实验室里,我们将探索softmax函数。当解决多类分类问题时,该函数用于Softmax回归和神经网络。 在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
plt.style.use('./deeplearning.mplstyle')
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from IPython.display import display, Markdown, Latex
from sklearn.datasets import make_blobs
%matplotlib widget
from matplotlib.widgets import Slider
from lab_utils_common import dlc
from lab_utils_softmax import plt_softmax
import logging
logging.getLogger("tensorflow").setLevel(logging.ERROR)
tf.autograph.set_verbosity(0)

注:通常,在本课程中,笔记本使用以0开始计数,以N-1结束计数的约定,∑𝑁−1.𝑖=0
,而讲座以1开始,以N结束,∑𝑁𝑖=1.
这是因为代码通常会以0开始迭代,而在讲座中,从1到N计数会产生更干净、更简洁的方程。这本笔记本的方程式比实验室的典型方程式多,因此将打破惯例,从1到N计数。

Softmax函数
在具有Softmax输出的Softmax回归和神经网络中,生成N个输出,并选择一个输出作为预测类别。在这两种情况下,矢量𝐳由应用于softmax函数的线性函数生成。softmax功能转换𝐳
转换成如下所述的概率分布。在应用softmax之后,每个输出将在0和1之间,并且输出将加1,使得它们可以被解释为概率。较大的输入将对应于较大的输出概率。
在这里插入图片描述
在这里插入图片描述
这表明输出是一个概率向量。第一个条目是输入是给定输入的第一个类别的概率𝐱
和参数𝐰和𝐛.让我们创建一个NumPy实现:

def my_softmax(z):ez = np.exp(z)              #element-wise exponenialsm = ez/np.sum(ez)return(sm)

下面,使用滑块更改z输入的值。

plt.close("all")
plt_softmax(my_softmax)

在这里插入图片描述
图1当您改变上述z的值时,需要注意以下几点:

  • softmax分子中的指数放大了数值中的微小差异
  • 输出值总和为1
  • softmax跨越所有输出。例如,z0的变化将改变a0-a3的值。将其与具有单个输入和单个输出的ReLu或Sigmoid等其他激活进行比较。

Cost

在这里插入图片描述
与Softmax相关的损失函数,即交叉熵损失,为:
在这里插入图片描述

其中y是本例的目标类别,𝐚是softmax函数的输出。特别是中的值𝐚是总和为1的概率。

回想一下:在本课程中,损失是一个例子,而成本涵盖了所有例子。

注意,在上面的(3)中,只有与目标相对应的线对损失有贡献,其他线为零。为了编写成本方程,我们需要一个“指标函数”,当指数与目标匹配时,该函数为1,否则为零。
在这里插入图片描述
在这里插入图片描述

Tensorflow

本实验室将讨论两种实现softmax的方法,Tensorflow中的交叉熵损失,“明显”方法和“首选”方法。前者是最直接的,而后者在数值上更稳定。
让我们首先创建一个数据集来训练多类分类模型。

# make  dataset for example
centers = [[-5, 2], [-2, -2], [1, 2], [5, -2]]
X_train, y_train = make_blobs(n_samples=2000, centers=centers, cluster_std=1.0,random_state=30)

显而易见的组织
下面的模型是用softmax作为最终致密层中的激活来实现的。loss函数在compile指令中单独指定。
损失函数稀疏类别交叉熵。上述(3)中所述的损失。在这个模型中,softmax发生在最后一层。损失函数采用softmax输出,softmax输出是概率的向量。

model = Sequential([ Dense(25, activation = 'relu'),Dense(15, activation = 'relu'),Dense(4, activation = 'softmax')    # < softmax activation here]
)
model.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(),optimizer=tf.keras.optimizers.Adam(0.001),
)model.fit(X_train,y_train,epochs=10
)

在这里插入图片描述
因为softmax被集成到输出层中,所以输出是概率的向量

p_nonpreferred = model.predict(X_train)
print(p_nonpreferred [:2])
print("largest value", np.max(p_nonpreferred), "smallest value", np.min(p_nonpreferred))
63/63 [==============================] - 0s 1ms/step
[[3.74e-03 2.83e-03 9.64e-01 2.92e-02][9.96e-01 4.21e-03 1.13e-05 7.58e-05]]
largest value 0.9999949 smallest value 1.9021733e-09

Preferred
回想一下讲座,如果在训练中结合softmax和loss,可以获得更稳定、更准确的结果。这是由此处显示的“首选”组织启用的。
在这里插入图片描述
在优选的组织中,最后一层具有线性激活。由于历史原因,这种形式的输出被称为logits。loss函数还有一个额外的参数:from_logits=True。这会通知损失函数softmax操作应包含在损失计算中。这允许优化实现。

preferred_model = Sequential([ Dense(25, activation = 'relu'),Dense(15, activation = 'relu'),Dense(4, activation = 'linear')   #<-- Note]
)
preferred_model.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),  #<-- Noteoptimizer=tf.keras.optimizers.Adam(0.001),
)preferred_model.fit(X_train,y_train,epochs=10
)

在这里插入图片描述

输出处理
注意,在首选模型中,输出不是概率,而是从大负数到大正数的范围。当执行预期概率的预测时,必须通过softmax发送输出。让我们来看看首选的模型输出:

p_preferred = preferred_model.predict(X_train)
print(f"two example output vectors:\n {p_preferred[:2]}")
print("largest value", np.max(p_preferred), "smallest value", np.min(p_preferred))
63/63 [==============================] - 0s 1ms/step
two example output vectors:[[-0.26 -1.67  3.39 -0.25][ 6.5   1.12 -2.74 -2.4 ]]
largest value 12.235959 smallest value -9.061906

输出预测不是概率!如果期望的输出是概率,则该输出应通过softmax进行处理。

sm_preferred = tf.nn.softmax(p_preferred).numpy()
print(f"two example output vectors:\n {sm_preferred[:2]}")
print("largest value", np.max(sm_preferred), "smallest value", np.min(sm_preferred))
two example output vectors:[[2.47e-02 6.04e-03 9.44e-01 2.48e-02][9.95e-01 4.61e-03 9.66e-05 1.35e-04]]
largest value 0.999998 smallest value 5.6292937e-10

要选择最可能的类别,不需要softmax。可以使用np.argmax()找到最大输出的索引。

for i in range(5):print( f"{p_preferred[i]}, category: {np.argmax(p_preferred[i])}")
[-0.26 -1.67  3.39 -0.25], category: 2
[ 6.5   1.12 -2.74 -2.4 ], category: 0
[ 4.89  1.43 -1.95 -1.89], category: 0
[-0.4   5.31 -0.04 -0.4 ], category: 1
[ 1.22 -1.58  6.53 -1.76], category: 2

稀疏类别交叉熵或类别交叉熵

Tensorflow有两种潜在的目标值格式,损失的选择定义了预期值。
SparseCategorialCrossentropy:期望目标是与索引相对应的整数。例如,如果有10个潜在的目标值,y将在0和9之间。
类别交叉熵:期望示例的目标值是一个热编码的值,其中目标索引处的值为1,而其他N-1个条目为零。一个具有10个潜在目标值的示例(其中目标为2)为[0,0,1,0,0,0,0]。

祝贺

在这个实验室里,你

  • 越来越熟悉softmax函数及其在softmax回归和神经网络中的softmax激活中的应用。
  • 在Tensorflow中学习了首选的模型构建:
    • 最后一层没有激活(与线性激活相同)
    • 稀疏类别交叉熵损失函数
    • use from_logits=True
  • 认识到与ReLu和Sigmoid不同,softmax跨越多个输出。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向低成本巡线机器人的PID控制器优化——文末源码

目录 介绍 测试 电子元器件 系统特征 控制器设计 位置误差的计算 比例控制 积分控制 微分控制 改进的PID控制器 测试轨迹 源码链接 本文对经典PID控制器的改进和开环控制机制的发展进行了讨论&#xff0c;以提高差动轮式机器人的稳定性和鲁棒性。为了部署该算法&am…

香港科技大学(广州)先进材料学域可持续能源与环境学域智能制造学域博士招生宣讲会——北京专场(暨全额奖学金政策)

三个学域代表教授亲临现场&#xff0c;面对面答疑解惑助攻申请&#xff01;可带简历现场咨询和面试&#xff01; &#x1f4b0;一经录取&#xff0c;享全额奖学金1.5万/月&#xff01; 报名链接&#xff1a; https://www.wjx.top/vm/wF2Mant.aspx# 地点&#xff1a;中关村皇冠…

Redis中RDB的dirty机制和AOF中的后台重写机制

RDB的dirty计数器和lastsave属性 服务器除了维护saveparams数组之外&#xff0c;还维持着一个dirty计数器,以及一个lastsave属性: 1.dirty计数器记录距离上一次成功执行SAVE命令或者BGSAVE命令之后&#xff0c;服务器对数据库状态(服务器中的所有数据库)进行了多少次修改(包括…

文件操作3

随机读写数据文件 一、随机读写原理 在我们写数据时&#xff0c;有一个光标不断的在随着新写入的数据往后移动&#xff1b; 而读数据时&#xff0c;也有一个看不见光标&#xff0c;随着已经读完的数据&#xff0c;往后移动 这里的文件读写位置标记——可以想象成图形界面里的…

QB PHP 多语言配置

1&#xff1a; 下载QBfast .exe 的文件 2&#xff1a; 安装的时候 &#xff0c;一定点击 仅为我 安装 而不是 所有人 3&#xff1a; 如果提示 更新就 更新 &#xff0c; 安装如2 4&#xff1a; 如果遇到 新增 或者编辑已经 配置的项目时 不起作用 &#xff1a; 右…

05:HAL-----看门狗WDT

目录 一:看门狗 1:WDT 2:独立看门狗 (IWDG) A:IWDG框图 B:IWDG_KR键寄存器 C:IWDG超时时间 D:HAl库的配置 3:窗口看门狗 (WWDG) A:WWDG框图 B:WWDG工作特性 C:WWDG超时时间 D:HAL库配置 4:独立看门狗和窗口看门狗的区别 5:数据手册 二:案例 A:独立看门狗 B:窗…

springboot项目学习-瑞吉外卖(4)

1.任务 这一节主要的任务是解决文件的上传和下载功能 2.文件上传 概念&#xff1a;将本地的图片上传到浏览器上面 点击文件上传&#xff0c;前端就会发送如上的请求&#xff0c;服务端应该根据URL和请求方法来处理请求 CommonController类&#xff1a; RestController Slf4j …

【第二部分--Python之基础】

一、初识 开发语言&#xff1a; 高级语言&#xff1a;Python Java PHP C# Go Ruby C ... > 字节码 低级语言&#xff1a;C 汇编 > 机器码 …

初始Redis关联和非关联

基础篇Redis 3.初始Redis 3.1.2.关联和非关联 传统数据库的表与表之间往往存在关联&#xff0c;例如外键&#xff1a; 而非关系型数据库不存在关联关系&#xff0c;要维护关系要么靠代码中的业务逻辑&#xff0c;要么靠数据之间的耦合&#xff1a; {id: 1,name: "张三…

指针知识大礼包,让你的编程之路更顺畅(一)

1. 内存和地址 2. 指针变量和地址 3. 指针变量类型的意义 4. const修饰指针 5. 指针运算 6. 野指针 7. assert断⾔ 8. 指针的使⽤和传址调⽤ 正文开始 1. 内存和地址 1.1 内存 在讲内存和地址之前&#xff0c;我们想有个⽣活中的案例&#xff1a; 假设有⼀栋宿舍楼&a…

自锁电路设计

自锁电路设计 Hi,uu们,是不是经常要用到自锁电路,通常不是使用555芯片就是用比较器来做自锁,今天我们来简单看下自锁电路的设计.图1采用了比较器构建了一个自锁电路,采用低电平复位&#xff0c;当需要复位的时候志需要将反向端的二极管拉低一下即可&#xff0c;免去 三极管控制…

springboot 大文件分片上传

springboot 大文件分片上传 constantentityvocontrollerutils大文件分片上传是一种将大文件分割成多个小文件片段,然后分别上传这些小文件片段的方法。这种方法的好处包括: 减少重新上传开销:如果网络传输中断,只需重传未上传的部分,而不是整个文件。 提高灵活性:分片大小…

【Selenium】隐藏元素的定位和操作|隐藏与isDisplay方法

一、selenium 中隐藏元素如何定位&#xff1f; 如果单纯的定位的话&#xff0c;隐藏元素和普通不隐藏元素定位没啥区别&#xff0c;用正常定位方法就行了 但是吧~~~能定位到并不意味着能操作元素&#xff08;如click,clear,send_keys&#xff09; 二、隐藏元素 如下图有个输入框…

Alibaba spring cloud Dubbo使用(基于Zookeeper或者基于Nacos+泛化调用完整代码一键启动)

Quick Start Dubbo&#xff01;用更优雅的方式来实现RPC调用吧 - 掘金 dubbozookeeper demo 项目结构&#xff1a; RpcService 仅仅是提供服务的接口&#xff1a; public interface HelloService {String sayHello(String name); }DubboServer pom&#xff1a; <?xm…

EDR下的线程安全

文章目录 前记进程断链回调执行纤程内存属性修改early birdMapping后记reference 前记 触发EDR远程线程扫描关键api&#xff1a;createprocess、createremotethread、void&#xff08;指针&#xff09;、createthread 为了更加的opsec&#xff0c;尽量采取别的方式执行恶意代…

【Flutter学习笔记】10.3 组合实例:TurnBox

参考资料&#xff1a;《Flutter实战第二版》 10.3 组合实例&#xff1a;TurnBox 这里尝试实现一个更为复杂的例子&#xff0c;其能够旋转子组件。Flutter中的RotatedBox可以旋转子组件&#xff0c;但是它有两个缺点&#xff1a; 一是只能将其子节点以90度的倍数旋转二是当旋转…

2002-2023年各地级市环境规制强度数据(环保词频统计)

2002-2023年各地级市环境规制强度数据&#xff08;环保词频统计&#xff09; 1、时间&#xff1a;2002-2023年 2、来源&#xff1a;政府工作报告 3、指标&#xff1a; 行政区划代码、年份、城市、所属省份、文本总长度、仅中英文-文本总长度、文本总词频-全模式、文本总词频…

瑞_23种设计模式_职责链模式

文章目录 1 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;★★★1.1 介绍1.2 概述1.3 职责链模式的结构1.4 职责链模式的优缺点1.5 职责链模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 JDK源码解析&#xff08;FilterCh…

软件测试 - postman高级使用

断言 概念&#xff1a;让程序代替人判断测试用例执行的结果是否符合预期的一个过程 特点&#xff1a; postman断言使用js编写&#xff0c;断言写在postman的tests中 tests脚本在发送请求之后执行&#xff0c;会把断言的结果最终在testresult中进行展示 常用的postman提供的…

C++剑指offer与高频面试题源码解答与分析

这是博主在当初秋招刷题时候记录的剑指offer第二版以及一些高频题的C源码和解法分析&#xff0c;可以说把这上面的题练好了面试不虚&#xff0c;最后也顺利帮助我拿下baidu ali meituan等多家大厂offer。整篇文章写了大概5W个字&#xff0c;也是积累了很长一段时间的作品&#…