当前位置: 首页 > news >正文

基础!!!吴恩达deeplearning.ai:神经网络中使用softmax

以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai

文章目录

  • softmax作为输出层的神经网络
  • Tensorflow的实现
  • softmax的改进实现
    • 数值舍入误差(Numerical Roundoff Errors)
    • sigmoid修改
    • 修改softmax


在上一篇博客中我们了解了有关softmax的原理相关内容,今天我们主要聚焦于如何修改之前的神经网络,从而搭建能够实现多分类问题的神经网络。

softmax作为输出层的神经网络

在这里插入图片描述
相比之前的二分类逻辑回归神经网络,我们主要的改变是将输出层替换为了具有十个神经元的,激活函数为softmax的输出层。整个神经网络的运行流程是接收特征输入X,并且传入隐藏层,两个隐藏层的激活函数均采用的是relu函数;再传入最终输出层,最终的输出 a [ 3 ] a^{[3]} a[3]是一个包含十个概率值的矩阵。
我们再回顾下softmax的公式(这里仅以a1为例):
z 1 = w 1 ⃗ ⋅ x ⃗ + b 1 a 1 = e z 1 e z 1 + e z 2 + e z 3 + e z 4 z_1=\vec{w_1}\cdot\vec{x}+b_1\\ a_1=\frac{e^{z_1}}{e^{z_1}+e^{z_2}+e^{z_3}+e^{z_4}} z1=w1 x +b1a1=ez1+ez2+ez3+ez4ez1
此外提一个定义,softmax层有时也被叫做softmax函数。与其它的激活函数相比不同的是,softmax中 a 1 a_1 a1仅仅和 z 1 z_1 z1有关, a 2 a_2 a2仅仅和 z 2 z_2 z2有关,而不像其它的激活函数最终的某个输出a和多个z有关。
让我们看看如何用代码实现这个神经网络

Tensorflow的实现

第一步,构建神经网络的结构框架:

import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
model = Sequential([Dense(units=25, activation='relu')Dense(units=15, activation='relu')Dense(units=10, activation='softmax')])

第二步,定义损失函数和价值函数

from tensorflow.keras.losses import
SparseCategoricalCrossentropy
model.compile(loss=SparseCategoricalCrossentropy())

这里出现了一个新的函数SparseCategoricalCrossentropy(),翻译成中文叫做稀疏分类交叉熵,名字超长,甚至超过了当初的二元交叉熵。稀疏(Sparse)的意思是值只能取1~10中的一个;分类(Categorical)指的是你仍然将y分类。
第三步,训练模型,预测代码和以前一样:

model.fit(X, Y, epochs=100)

以上代码是可以起作用的,符合我们之前的认知,但是还不够优化,在tensorflow中有更好的代码版本。下面我们看看如何优化softmax代码。

softmax的改进实现

数值舍入误差(Numerical Roundoff Errors)

让我先展示下在计算机设置数值的两种不同方法:
第一种,简单粗暴法:
x = 2 10 , 000 x=\frac{2}{10,000} x=10,0002
第二种,加加减减法:
x = ( 1 + 1 10 , 000 ) − ( 1 − 1 10 , 000 ) x=(1+\frac{1}{10,000})-(1-\frac{1}{10,000}) x=(1+10,0001)(110,0001)
虽然看上去相同,但是精确度是由差别的:
在这里插入图片描述
我们对softmax的改进,也主要聚焦在精确度上面,让我介绍一种更加精确的方法。

sigmoid修改

在逻辑回归中,我们的公式是这样的:
a = g ( z ) = 1 1 + e − z l o s s = − y l o g a − ( 1 − y ) l o g ( 1 − a ) a=g(z)=\frac{1}{1+e^-z}\\ loss=-yloga-(1-y)log(1-a) a=g(z)=1+ez1loss=yloga(1y)log(1a)
它的代码是:

model = Sequential([Dense(units=25, activation='relu')Dense(units=15, activation='relu')Dense(units=10, activation='sigmoid')])
model.compile(loss=BinaryCrossEntropy())

如果我们要求tensorflow按照这个步骤,一步步算出a,然后带入到loss之中,那么结果就会如同上面的第二种方法一样产生误差,因为其进行了两步运算。但是tensorflow提供了另一种方法,大致意思就是我们先使用线性激活函数(也可以理解为没使用激活函数),最后在计算损失的时候再指定激活函数为sigmoid。如果我们使用了这个命令,这会为tensorflow提供更高的灵活性,从而可以减少误差,就如同上面的方法一;代码如下:

model = Sequential([Dense(units=25, activation='relu')Dense(units=15, activation='relu')Dense(units=10, activation='linear')])
model.compile(loss=BinaryCrossEntropy(from_logits=True))

通俗点说from_ligits=True告诉了激活函数inaryCrossEntropy我没有用激活函数哦,所以你计算损失时内部记得调用下sigmoid哈。这里的logits可以理解为没有经过激活函数的z。

修改softmax

同样地,我们再看看稀疏分类交叉熵的损失函数,我就写出其中的一项:
L o s s = − l o g a i f y = 1 Loss=-loga\:ify=1 Loss=logaify=1

由于在多分类问题之中,分类的选项很多,而各个选项的概率和是一定的为1,因此很多情况下正确的那个选项的概率依然很小,由于使用了log函数,在x接近于0的时候这个值会非常大,那么产生的误差也就会很大,而二分类问题由于选项仅有两个,因此这个问题不是很明显,便没在讲二分类的时候也进行这种优化。
一样地,我们代码也可以修改为:

model = Sequential([Dense(units=25, activation='relu')Dense(units=15, activation='relu')Dense(units=10, activation='linear')])from tensorflow.keras.losses import
SparseCategoricalCrossentropy
model.compile(loss=SparseCategoricalCrossentropy(from_logits=True))

另外需要修改的地方是,我们在预测时,model(x)不再是概率a了,而是没经过激活函数的z,因此代码在最后需要添加:

model.fit(X, Y, epochs=100)
logits = model(X)
f_x = tf.nn.softmax(logits)

从而再加入了softmax,出来的才是0~1之间的概率a。
为了给读者你造成不必要的麻烦,博主的所有视频都没开仅粉丝可见,如果想要阅读我的其他博客,可以点个小小的关注哦。

相关文章:

基础!!!吴恩达deeplearning.ai:神经网络中使用softmax

以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai 文章目录 softmax作为输出层的神经网络Tensorflow的实现softmax的改进实现数值舍入误差(Numerical Roundoff Errors)sigmoid修改修改softmax 在上一篇博客中我们了解了有关softmax的原理相关内容…...

mapbox高德地图与相机

mapbox高德地图与相机 本案例使用Mapbox GL JavaScript库创建高德地图。 演示效果引入 CDN 链接地图显示 创建地图实例定义地图数据源配置地图图层 设置地图样式实现代码 1. 演示效果 2. 引入 CDN 链接 <script src"https://api.mapbox.com/mapbox-gl-js/v2.12.0/mapb…...

Eslint在Vscode中使用技巧的相关技巧

ps :该文章会详细结论构建一个脚手架遇到的问题&#xff0c;会持续更新&#xff0c;请定时查看 Eslint相关​ 在vscode中使用eslint插件 在vscode中用户配置没有开启eslint.enable 在vscode中工作区配置开启eslint.enable settings.json中没有做eslint相关配置 在编写的vue…...

045-WEB攻防-PHP应用SQL二次注入堆叠执行DNS带外功能点黑白盒条件

045-WEB攻防-PHP应用&SQL二次注入&堆叠执行&DNS带外&功能点&黑白盒条件 #知识点&#xff1a; 1、PHP-MYSQL-SQL注入-二次注入&利用条件 2、PHP-MYSQL-SQL注入-堆叠注入&利用条件 3、PHP-MYSQL-SQL注入-带外注入&利用条件 演示案例&#xff1a…...

【蓝牙协议栈】【BR/EDR】【AVRCP】蓝牙音视频远程控制协议

1. AVRCP概念 AVRCP(Audio/Video Remote Control Profile):音视频远程控制协议定义了蓝牙设备和 audio/video控制功能通信的特点和过程,另用于远程控制音视频设备,底层传输基于 AVCTP(音视频控制传输协议)。 ➢该 Profile定义了AV/C数字命令控制集。命令和信息通过 AVCT…...

Head First Design Patterns - 单例模式

什么是单例模式 单例模式确保应用中&#xff0c;一个类最多只有一个实例单例模式也提供访问此实例的全局访问点单例模式实现中&#xff0c;使用了一个私有构造器&#xff0c;一个静态方法以及一个静态变量 为什么要用单例模式 java中静态全局变量也能做到被实例化一次 但是…...

Mysql的备份还原

模拟环境准备 创建一个名为school的数据库&#xff0c;创建一个名为Stuent的学生信息表 mysql> create database school; Query OK, 1 row affected (0.00 sec)mysql> use school; Database changed mysql> CREATE TABLE Student (-> Sno int(10) NOT NULL COMME…...

分区表介绍

问题 单表数据量过大&#xff0c;查询的性能通常会变得很低 查询时磁盘的IO次数增加&#xff1a;MySQL的InnoDB引擎使用B树维护索引&#xff0c;一个典型的索引节点大概可以存储60-120个数据记录&#xff0c;一个三层的索引大概可以存储百万条数据。如果订单表增加一个数量级…...

emacs 源码分析(七)

文章目录 emacs源码分析&#xff08;七&#xff09;自己动手把emacs的DEFUN宏抠出来 <2024-01-07 周日> emacs源码分析&#xff08;七&#xff09; 这DEFUN宏就像胶水一样&#xff0c;它把c代码和emacs-lisp代码给联系起来。但是DEFUN宏看着怪恐怖的有没有&#xff01;…...

Linux运维-Web服务器的配置与管理(Apache+tomcat)(没成功,最后有失败经验)

Web服务器的配置与管理(Apachetomcat) 项目场景 公司业务经过长期发展&#xff0c;有了很大突破&#xff0c;已经实现盈利&#xff0c;现公司要求加强技术架构应用功能和安全性以及开始向企业应用、移动APP等领域延伸&#xff0c;此时原来开发web服务的php语言已经不适应新的…...

探讨分布式数据库ID生成解决方案

在技术面试中&#xff0c;面试官通常通过挑战应聘者的分布式系统知识来评估其能力。今天&#xff0c;让我们模拟一场面试现场&#xff0c;深入了解关于分布式数据库ID生成的解决方案。 面试官&#xff1a;嘿&#xff0c;小伙子&#xff0c;分布式数据库ID生成解决方案了解吗&a…...

Clickhouse填坑记4:Too many parts问题分析

Clickhouse在进行大数据量同步时,感觉很爽,插入速度非常快,但是,在使用过程中却出现了几次“Too many parts”异常报错,搞得很痛苦,这里记录一下解决过程。 我这边采用的是Flink程序,实时将数据写入ClickHouse,在执行一段时间后,会提示“Too many parts”异常,如下异…...

CertiK CSO Dr. Kang Li 确认出席Hack .Summit() 香港区块链盛会

CertiK CSO Dr. Kang Li 确认将出席由 Hack VC 主办&#xff0c;并由 AltLayer 和 Berachain 联合主办&#xff0c;与 SNZ 和数码港合作&#xff0c;由 Techub News 承办的Hack.Summit() 2024区块链开发者盛会。 Dr. Kang Li 目前担任CertiK首席安全官。他是清华蓝莲花战队启蒙…...

C++ 游戏飞机大战, 字符型的

//#define _CRT_SECURE_NO_WARNINGS 1 用于禁止不安全函数的警告 #include<iostream> #include<stdlib.h> #include<string> #include<conio.h> #include<Windows.h> #include<time.h> #include <graphics.h> using namespace std;…...

用html编写的简易新闻页面

用html编写的简易新闻页面 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document<…...

docker-mysql:5.7安装

1、下载mysql:5.7镜像 [rootlocalhost ~]# docker search mysql (某个XXX镜像名字) [rootlocalhost ~]# docker pull mysql:5.7 按装之前查看一下是否按装过mysql。如果安装过会占用3306端口。 [rootlocalhost ~]# ps -ef | grep mysql 2、简单的安装 [rootlocalhost ~]# d…...

SQLPro Studio:数据库管理的革命性工具 mac版

SQLPro Studio是一款强大的数据库管理和开发工具&#xff0c;它旨在提供高效、便捷和安全的数据库操作体验。无论是数据库管理员、开发人员还是数据分析师&#xff0c;SQLPro Studio都能满足他们在数据库管理、查询、设计和维护方面的需求。 SQLPro Studio mac版软件获取 首先…...

【小沐学QT】QT学习之OpenGL开发笔记

文章目录 1、简介2、Qt QOpenGLWidget gl函数3、Qt QOpenGLWidget qt函数4、Qt QOpenGLWindow5、Qt glut6、Qt glfw结语 1、简介 Qt提供了与OpenGL实现集成的支持&#xff0c;使开发人员有机会在更传统的用户界面的同时显示硬件加速的3D图形。 Qt有两种主要的UI开发方…...

kali安装ARL灯塔(docker)

1、root身份进入容器 ┌──(root㉿Kali)-[~/桌面] └─# su root ┌──(root㉿Kali)-[~/桌面] └─# docker 2、先更新再克隆 ┌──(root㉿Kali)-[~/桌面] └─# apt-get update …...

字节面试分享,请详细介绍为何Http Post发送两次请求

在浏览器中&#xff0c;内容是很开放的&#xff0c;任何资源都可以接入其中&#xff0c;如 JavaScript 文件、图片、音频、视频等资源&#xff0c;甚至可以下载其他站点的可执行文件。 但也不是说浏览器就是完全自由的&#xff0c;如果不加以控制&#xff0c;就会出现一些不可…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...