TensorFlow入门(十九、softmax算法处理分类问题)

softmax是什么?

        Sigmoid、Tanh、ReLU等激活函数,输出值只有两种(0、1,或-1、1或0、x),而实际现实生活中往往需要对某一问题进行多种分类。例如之前识别图片中模糊手写数字的例子,这个时候就需要使用softmax算法。

softmax的算法逻辑

         如果判断输入属于某一个类的概率大于属于其他类的概率,那么这个类对应的值就逼近于1,其他类的值就逼近于0。它能将一个含任意实数的K维向量"压缩"到另一个K维向量中,使得每一个元素的范围都在0~1之间,并且使所有元素的和为1。同时,它可以将分类结果归一化,形成一个概率分布。

        softmax算法主要应用于多分类,而且是互斥的,即只能属于其中的一个类。而像Sigmoid这些一般的激活函数只能分两类,因此可以把softmax理解为是Sigmoid类的激活函数的扩展。

        其算法公式:

                即把所有值用e的n次方计算出来,求和后算每个值占的比率,保证总和为1,一般就可以认为softmax得出的就是概率。这里的exp(logits)指的就是e^logits。

                注意 : 对于要生成的多个类任务中不是互斥关系的任务,一般会使用多个二分类来组成。

softmax的原理

        以下为一个简单的softmax网络模型图:

                

        如图所示,输入的是x1和x2,识别输出的为y1、y2和y3三个类。

        对于属于y1类的概率,可以转化成输入x1满足某个条件的概率,与x2满足某个条件的概率的乘积,即y1 = (x1*w11)*(x2*w12)。在网络模型里把等式两边都取ln,ln后的属于y1类的概率就可以转化成,ln后的x1满足某个条件的概率加上ln后的x2满足某个条件的概率,即y1 = x1*w11+x2*w12等于ln后y1的概率。这也是softmax公式中要进行一次e的logits次方的原因。

        注意 : 等式两边取ln是神经网络中常用的技巧,主要用来将概率的乘法转变成加法,即ln(x*y) = lnx + lny。然后在后续计算中再将其转为e的x次方,还原成原来的值。

        举例 : 

                假设三个数值A=5,B=1,C=-1,那么他们的softmax占比为:

                        P(A)=(e^5)/(e^5 + e + e^-1)

                        P(B)=(e^1)/(e^5 + e + e^-1)

                        P(C)=(e^-1)/(e^5 + e + e^-1)

                计算结果为 : P(A) = 0.9817        P(B) = 0.0180        P(C) = 0.0003

                                     P(A) + P(B) + P(C) = 1

                因为P(A)值最大,因此取最大的值A为最终的分类。

softmax的一些特性

        ①归一化 : 每一个分类的概率之和为1,每一个分类都是一个小于1的数值。

        ②具有放大效果,比如上面例子中单纯从数值来看,5和1的差距并不大,但是通过指数运算后有明显的放大效果,5的占比能到98%以上。

        ③具有散列性质,每一个比率虽然最后都会进行归一化,但是他们放大之前的数值是可以相互不干扰的。

        基于上述这些特征,softmax在机器学习中的应用非常广泛,比如之前识别MNIST中每张图片中的数字是哪一个数字,就是一个使用softmax回归(softmax regression)模型的经典案例。

        注意 : 在实际使用中,softmax伴随的分类标签都为one_hot编码,而且这里还有个技巧,在softmax时需要将目标分成几类,就在最后这层放几个节点。

常用的分类函数

        TensorFlow中常用的分类函数主要有两个:

                ①tf.nn.softmax(logits,axis = None,name = None)

                        tf.nn.softmax函数最终返回的是一个tensor,与参数logits具有相同的类型和shape,这个tensor代表向量各个位置的得分(即概率)。所以通过tf.nn.softmax函数将logistic的预测二分类的概率的问题推广到了n分类的概率的问题。

                ②tf.nn.log_softmax(logits,axis = None,name = None)

                        tf.nn.log_softmax函数是对tf.nn.softmax函数的结果取对数,即把softmax函数的结果再进行log计算一遍。使用它可以使得计算速度变快,数据更加稳定。同时,也可以直接用于计算softmax的交叉熵loss。

        每个参数的意义如下:

                logits代表一个非空的tensor。类型必须是float32或float64

                axis表示在哪个维度上执行softmax计算。默认值为-1,表示最后一个维度

                name为操作的名称

如何使用softmax函数

        示例代码如下:

import tensorflow as tfvar = tf.constant([2,3,6,10,4,5,1],dtype = tf.float32)
pr = tf.nn.softmax(var)print(pr)
#tf.argmax()函数用于找到张量(Tensor)中指定维度上的最大值的索引。它返回的是最大值所在位置的索引值
print(tf.argmax(pr))

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

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

相关文章

云原生Kubernetes:Rancher管理k8s集群

目录 一、理论 1.Rancher 2.Rancher 安装及配置 二、实验 1.Rancher 安装及配置 三、问题 1. Rancher 部署监控系统报错 四、总结 一、理论 1.Rancher (1) 概念 Rancher 简介 Rancher 是一个开源的企业级多集群 Kubernetes 管理平台,实现了 Kubernetes …

软件测试学习(二)静态白盒测试、动态白盒测试、配置测试、兼容性测试、外国语言测试

目录 静态白盒测试:检查设计和代码 正式审查 同事审查 走查 检验 编码标准和规范 通用代码审查清单 数据引用错误 数据声明错误 计算错误 比较错误 控制流程错误 子程序参数错误 输入/输出错误 其他检查 动态白盒测试:带上x光眼镜测试 …

主动配电网故障恢复的重构与孤岛划分matlab程序

微❤关注“电气仔推送”获得资料(专享优惠) 参考文档: A New Model for Resilient Distribution Systems by Microgrids Formation; 主动配电网故障恢复的重构与孤岛划分统一模型; 同时考虑孤岛与重构的配电网故障…

【Vue基础-数字大屏】加载动漫效果

一、需求描述 当网页正在加载而处于空白页面状态时,可以在该页面上显示加载动画提示。 二、步骤代码 1、全局下载npm install -g json-server npm install -g json-server 2、在src目录下新建文件夹mock,新建文件data.json存放模拟数据 {"one&…

linux查看文件内容命令more/less/cat/head/tail/grep

1.浏览全部内容more/less 文件: more:可以查看文件第一屏的内容,同时左下角有一个显示内容占全部文件内容的百分比,空格键会显示下一屏的内容,直到文件末尾 [rootmaster data]# more file1less:相较于mor…

1014蓝桥算法双周赛,学习算法技巧,助力蓝桥杯

家人们,我来免费给大家送福利了!!! 【1014蓝桥算法双周赛 】 背景 蓝桥杯全国软件和信息技术专业人才大赛是由工业和信息化部人才交流中心举办的全国性IT学科赛事。参赛高校超过1200余所,累计参赛人数超过40万人。该…

Xcode升级到15.0 解决DT_TOOLCHAIN_DIR问题

根据个人开发遇到的问题做的总结,公司要求Xcode 14.2 ,Swift 5.7开发,由于升级了Mac 14.0系统后,Xcode 14.2不能使用,解决方案目前有2个 一、在原来Xcode 14.2 的显示包内容,如图 二、升级到Xcode的15.0后…

XML外部实体注入攻击XXE

xml是扩展性标记语言,来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,一般无法直接打开,可以选择用excl或记事本打…

iPhone 如何强制重启

参考iPhone的官方使用手册 传送门 尤其当 iPhone 未响应,也无法将其关机再开机,此方法最有效: 按住调高音量按钮,然后快速松开。按住调低音量按钮,然后快速松开。按住侧边按钮。当 Apple 标志出现时,松开侧…

【IDEA项目个别类爆红,但是项目可以正常运行】

打开项目时发现idea个别类爆红,但是项目可以正常运行 问题原因:Idea本身的问题,可能是其缓存问题,导致爆红 解决方案:重置Idea 很多时候排查不出代码问题,就尝试一下此操作。 选择目录:File–>Invalida…

钢筋智能测径仪 光圆与带肋钢筋均可检测!

在一个大规模、高效、连续的工业生产中,制造业正朝着自动化方向快速优化发展,这种自动化的生产需要快速、准确地分析控制生产工艺中的参数,超差及时提示,为操作工对工厂的运行和自我调节做出快速反应,人工操作越来越不…

安装项目运行环境(python依赖包+allure)

目录 一、安装自动化项目依赖包1.导出项目依赖库2.上传到远程仓库3.进入jenkins容器内,检查是否安装git4.配置git用户信息5.生成秘钥6.把代码拉取下来7.安装python项目依赖8.运行项目 二、安装allure1.jenkins容器内安装allure,进入/usr/local/2.下载all…