机器学习 day25(softmax在神经网络模型上的应用,提高数据精度的方法)

  1. 输出层采用softmax
    在这里插入图片描述
  • 在识别手写数字的模型中,预测y只有两个结果,所以输出层采用sigmoid激活函数且只有一个神经元。
  • 若预测y有10个结果(0-9),该模型的前向传播计算方式与识别数字的模型完全相同,即隐藏层的设定完全相同,那么输出层可以采用softmax激活函数,也叫该神经网络模型有一个softmax输出层
  • softmax激活函数与sigmoid激活函数的区别:对于sigmoid,a₁是只关于z₁的函数;对于softmax,a₁是关于z₁…z₁₀所有z的函数(每一个激活值a都取决于所有z的值)
  1. 用tensorflow实现softmax
    在这里插入图片描述
  • 与之前类似,有三个步骤来这指定和训练模型:第一步,指定模型结构并设定单元数和激活函数。第二步,指定损失函数和成本函数,在tensorflow中,称softmax激活函数的损失函数为SparseCategoricalCrossentropy函数。第三步,训练模型
  • 但这个版本的代码可能会损失数据精度,以下为提高数据精度的办法
  1. 提高数据精度
    在这里插入图片描述
  • 如图所示,在进行浮点数运算时,表达式不同结果也会不同,这是因为小数在计算机中用二进制来表示可能会丢失精度
  • 第二种情况先计算了两个中间值,再用两个中间值做运算,这加大了损失数据精度的可能。
  • 第二种可以通过化简表达式来达到第一种的数据精度
    在这里插入图片描述
  • 在之前逻辑回归模型中,输出层直接计算并输出激活值a,再将a的值带入损失函数,相当于上图的第二种情况,即先计算了中间值a,再将a的值代入损失函数进行运算,加大损失数据精度的可能
  • 相反,我们可以选择将输出层的激活值a隐式表达,即不直接计算出a的结果,转而将a直接代入损失函数中,再让tensorflow自动简化损失函数,来减小损失数据精度的可能
  • 在代码中:需要将输出层的激活函数设为linear,且将g(z)直接带入损失函数中。因为我们并不计算激活值a,所以不需要sigmoid激活函数,直接用linear激活函数输出z就行;因为要将a,即g(z)代入损失函数中,所以损失函数为关于z的函数
    在这里插入图片描述
  • 在之前的softmax回归模型中,输出层同样是直接计算并输出激活值a,再将a的值代入损失函数。同样是计算了中间值a,再将a的值代入损失函数进行运算,这加大了损失数据精度的可能。
  • 相反,我们也可以将输出层的激活值a隐式表达,即不直接计算出a的结果,转而将a直接代入损失函数,再让tensorflow自动简化损失函数,来减少损失数据精度的可能。
  • 代码中:同样将输出层的激活函数设为linear,且将g(z)直接代入损失函数中。因为我们也不需要计算激活值a,所以不需要softmax激活函数,直接用linear激活函数输出z就行;因为要将g(z)代入损失函数,所以损失函数为关于z的函数
  • 综上:这个版本与原始版本相比:提高了数据精度,增加了阅读的难度,但实现了几乎相同的事情
    在这里插入图片描述
  • 在softmax回归模型中,因为输出层的激活函数是linear,所以输出层的输出结果不再是a₁ - a₁₀,而是z₁ - z₁₀
    在这里插入图片描述
  • 对于逻辑回归模型也是如此,所以如果想要得到预测y为1的概率,还需要带入sigmoid函数g(z)

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

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

相关文章

第4集丨JavaScript 使用原型(prototype)实现继承——最佳实战2

目录 一、临时构造器方式1.1 代码实现1.2 代码分析 二. 增加uber属性,用于子对象访问父对象2.1 实现分析2.2 代码实现 三. 将继承封装成extend()函数3.1 代码实现3.1.1 临时构造器实现extend()3.1.2 原型复制实现extend2() 3.2 代码测试3.2.1 测试extend()函数3.2.1…

【实战项目】c++实现基于reactor的高并发服务器

基于Reactor的高并发服务器,分为反应堆模型,多线程,I/O模型,服务器,Http请求和响应五部分 全局 反应堆模型 Channel 描述了文件描述符以及读写事件,以及对应的读写销毁回调函数,对应存储arg读…

优化SQL查询实现高效数据检索(二)

大家好,本文将接着上文,继续介绍SQL查询优化的重要性以及如何优化SQL查询以实现更快的数据检索。 适当使用通配符 适当使用通配符对于优化SQL查询尤为重要,特别是在匹配字符串和模式方面。通配符是用于SQL查询中查找特定模式的特殊字符&…

K8s(kubernetes)集群搭建及dashboard安装、基础应用部署

基础介绍 概念 本质是一组服务器集群,在集群每个节点上运行特定的程序,来对节点中的容器进行管理。实现资源管理的自动化。 功能 自我修复弹性伸缩服务发现负载均衡版本回退存储编排 组件 控制节点(master)-控制平面 APIserver:资源操作…

Linux ❀ Openssh 8.9p1源码升级教程

文章目录 升级操作注意事项:1. 安装依赖2. 执行升级2.1 上传压缩包并保存配置2.2 开始升级 升级操作注意事项: 编译过程需要依赖,必须安装完成!!!SSH服务升级过程可能会导致无法远程连接服务器!!!若必须远程登录必须确认telnet服务可用!!!升…

第四十六章Java包(package)

在编写 Java 程序时,随着程序架构越来越大,类的个数也越来越多,这时就会发现管理程序中维护类名称也是一件很麻烦的事,尤其是一些同名问题的发生。有时,开发人员还可能需要将处理同一方面的问题的类放在同一个目录下&a…

Android - AIDL

一、概念 二、使用 2.1 Server 端 2.1.1 创建 .aidl 文件 Module右键→New→AIDL→AIDL File(如果不可选,在build.gradle的buildFeatures节点添加aidl true)。 在创建的接口中定义抽象方法。 interface IDemoAidlInterface {//自己的业…

【STM32MP135】修复EMMC模式启动时,uboot启动识别为usb0设备问题

文件路径:u-boot-stm32mp-v2021.10-stm32mp1-r1/arch/arm/dts/stm32mp135d-atk.dts 文件路径:u-boot-stm32mp-v2021.10-stm32mp1-r1/configs/stm32mp13_defconfig

基于霍夫变换的航迹起始算法研究(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 一、设计内容 利用Hough变换处理量测得到的含杂波的二维坐标,解决多目标航迹起始问题。使用Matlab进行仿真&#x…

TeeChart for.NET Crack

TeeChart for.NET Crack TeeChart for.NET为各种图表需求提供了图表控件,包括金融、科学和统计等重要的垂直领域。它可以处理您的数据,在各种平台上无缝创建信息丰富、引人入胜的图表,包括Windows窗体、WPF、带有HTML5/Javascript渲染的ASP.N…

k8s+springboot+CronJob 定时任务部署

kubernetesspringbootCronJob 定时任务配置如下代码: cronjob.yaml k8s 文件 apiVersion: batch/v1 kind: CronJob metadata:name: k8s-springboot-demonamespace: rz-dt spec:failedJobsHistoryLimit: 3 #执行失败job任务保留数量successfulJobsHistoryLimit: 5 …

2023.7月最新版idea安装Jrebel实现热部署,可解决后端启动等待时间过长问题

2023.7最新版idea热部署配置 一 下载jrebel插件二 激活我使用的方法 三 配置方式1 设置自动编译2 设置 compiler.automake.allow.when.app.running3 勾选项目,然后以Rebel方式启动 4 Settings查看Activation情况四 报错解决1 启动失败 2 端口被占用 五 总结 一 下载…