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

news2024/11/15 21:46:16

文章目录

    • 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 exponenial
    sm = 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),  #<-- Note
    optimizer=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.coloradmin.cn/o/1544313.html

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

相关文章

【Go】初始化项目

初始化 go mod init 项目的名字然后按照提示&#xff1a; 这一步会将依赖包安装上去 go mod tidy最后编译&#xff1a; go build *.go

Redis实战篇session共享问题

实战篇Redis 1.6、session共享问题 核心思路分析&#xff1a; 每个tomcat中都有一份属于自己的session,假设用户第一次访问第一台tomcat&#xff0c;并且把自己的信息存放到第一台服务器的session中&#xff0c;但是第二次这个用户访问到了第二台tomcat&#xff0c;那么在第…

抖店还好做吗?新人刚做有什么注意事项吗?2024抖店创业指南

我是王路飞。 “抖店还好做吗&#xff1f;”“现在入局抖店晚不晚&#xff1f;”“抖店还能做吗&#xff1f;” 这种累死的问题&#xff0c;在我20年开始做抖店的时候&#xff0c;就经常被人这样问。 一直到2024年的今天&#xff0c;依旧有很多人私信我&#xff0c;其中相当…

从数据页的角度看 B+ 树

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 大家背八股文的时候&#xff0c;都知道 MySQL 里 InnoDB 存储引擎是采用 B 树来组织数据的。 这点没错&#xff0c;但是大家知道 B 树里的节点里存放的是什么呢&#xff1f;查询数据的过程又是怎样的&am…

【进程概念】Linux进程状态 | 僵尸进程 | 孤儿进程

目录 Linux中的进程状态 R运行状态&S休眠状态 T/t停止状态stopped(tracing stop) D磁盘休眠状态Disk sleep X死亡状态dead&Z僵尸状态zombie 僵尸进程 僵尸进程的理解 演示僵尸进程 僵尸进程的危害 孤儿进程 孤儿进程的理解 演示孤儿进程 进程状态的查看…

简化业务流程,AppLink连接一定签

APPlink是什么 APPlink是RestCloud打造的一款简单易用的零代码自动化集成平台&#xff0c;为业务流程提供自动化的解决方案&#xff0c;将企业内部的核心系统以及第三方应用程序和云服务等进行集成。无论是开发人员还是业务人员&#xff0c;都可以使用APPlink轻松构建出高效、…

锁的7大分类

锁 首先会了解锁的整体概念&#xff0c;了解锁究竟有哪些分类的标准。在后面的文章中会对重要的锁进行详细的介绍。 锁的7大分类 需要首先指出的是&#xff0c;这些多种多样的分类&#xff0c;是评价一个事物的多种标准&#xff0c;比如评价一个城市&#xff0c;标准有人口多…

鸿蒙Harmony应用开发—ArkTS-高级组件:@ohos.advertising.AdComponent (非全屏广告展示组件))

本模块提供展示非全屏广告的能力。 说明&#xff1a; 本模块首批接口从API Version 11开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import { AdComponent } from ohos.advertising.AdComponent; AdComponent AdComponent(ads: Ar…

基于springboot+vue+Mysql的校园交友网站

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

基于Java校园跑腿管理系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

OSCP靶场--Crane

OSCP靶场–Crane 考点(CVE-2022-23940sudo service提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.229.146 -sC -sV --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-25 08:07 EDT Nmap scan report for 192.16…

项目中如何进行限流(限流的算法、实现方法详解)

❤ 作者主页&#xff1a;李奕赫揍小邰的博客 ❀ 个人介绍&#xff1a;大家好&#xff0c;我是李奕赫&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 记得点赞、收藏、评论⭐️⭐️⭐️ &#x1f4e3; 认真学习!!!&#x1f389;&#x1f389; 文章目录 限流的算法漏…

jdk api之UnsupportedEncodingException基础、应用、实战

博主18年的互联网软件开发经验&#xff0c;从一名程序员小白逐步成为了一名架构师&#xff0c;我想通过平台将经验分享给大家&#xff0c;因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验&#xff0c;晚上进行用心精简、整理、总结、定稿&…

力扣HOT100 - 49. 字母异位词分组

解题思路&#xff1a; 排序 注意&#xff1a; 返回时不能用List&#xff0c;因为List是抽象类&#xff0c;return的必须是List的具体实现&#xff0c;如ArrayList class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String, Lis…

哈希存储、哈希表、哈希表的基本操作、算法的一些概念

我要成为嵌入式高手之3月25日数据结构第七天&#xff01;&#xff01; ————————————————————————————— 搜索(查找)二叉树 思想&#xff1a;左大右小 主要为了进行二分查找&#xff0c;由于根节点选择不合适&#xff0c;容易造成树不平衡&#…

NOMA免调度接入技术

标题 系统模型 参考视频&#xff1a;添加链接描述 利用接收机的复杂度提升为代价&#xff0c;提升频谱效率。为了保证上行方向上面&#xff0c;能够接入更多的用户&#xff0c;NOMA的根本思路&#xff0c;就是让多个用户占用相同的资源进行上行传输 系统模型 采用TDMA的方式…

K8s-网络原理-下篇

引言 本文是《深入剖析 K8s》的学习笔记&#xff0c;相关图片和案例可从https://github.com/WeiXiao-Hyy/k8s_example中获取&#xff0c;欢迎Star! K8s 的网络隔离: NetWorkPolicy K8s 如何考虑容器之间网络的“隔离” -> NetWorkPolicy 以下是一个 NetWorkPolicy 的定义…

msvcp110.dll丢失修复办法

在计算机使用过程中&#xff0c;我们经常会遇到一些扩展名为.dll的文件&#xff0c;这些文件是动态链接库文件&#xff0c;用于提供程序运行时所需的函数和资源。其中&#xff0c;msvcp110.dll文件是一个非常重要的动态链接库文件&#xff0c;它属于Microsoft Visual C 2012 Re…

【vue核心技术实战精讲】1.3 - 1.5 VUE 指令 (上)

文章目录 前言 本节内容1、v-text 和 v-html代码效果 2、v-if 和 v-show代码效果 3、v-bind3.1、用法&#xff1a;v-bind: 属性 &#xff0c;简写 :3.2、动态 attribute 名效果 3.3、内联字符串拼接效果 3.4、绑定 class效果 3.5、style 绑定3.6、绑定一个全是 attribute 的对…

学点儿Java_Day10_集合框架(List、Set、HashMap)

1 简介 ArrayList: 有序(放进去顺序和拿出来顺序一致)&#xff0c;可重复 HashSet: 无序(放进去顺序和拿出来顺序不一定一致)&#xff0c;不可重复 Testpublic void test1() {String[] array new String[3];//List: 有序 可重复//有序: 放入顺序 与 拿出顺序一致&#xff0c;…