详解sigmoid与softmax, 多分类及多标签分类

详解sigmoid与softmax, 多分类及多标签分类详解 sigmoid 与 softmax 多分类及多标签分类激活函数介绍 sigmoid 激活函数 sigmoid 激活函数的性质 sigmoid 激活函数的使用激活函数介绍对于熟悉机器学习或神经网络的读者来说 sigmoid 与 softmax 两个激活函数并不陌生 但这两个激活函数在逻辑回归中应用 也是面试和笔试会问到的一些内容 掌握好这两个激活函数及其衍生的能力是很基础且重要的 下面为大家介绍下这两类激活函数

激活函数介绍

对于熟悉机器学习或神经网络的读者来说,sigmoid与softmax两个激活函数并不陌生,但这两个激活函数在逻辑回归中应用,也是面试和笔试会问到的一些内容,掌握好这两个激活函数及其衍生的能力是很基础且重要的,下面为大家介绍下这两类激活函数。

sigmoid激活函数

从函数定义上来看,sigmoid激活函数的定义域能够取任何范围的实数,而返回的输出值在0到1的范围内。sigmoid函数也被称为S型函数,这是由于其函数曲线类似于S型,在下面的内容中可以看到。此外,该函数曲线也可以用于统计中,使用的是累积分布函数。

sigmoid激活函数的性质

  • x: 输入
  • float:表示浮点型数据
  • exp:对其求指数
  • f(x): 函数输出

从上述函数可以看到,x的取值范围可以是全实数,sigmoid函数返回一个实数值输出,此外,sigmoid函数的一阶导数是非负或非正:

  • 非负: 如果输入数字大于或等于零;
  • 非正: 如果输入数字小于或等于零;

sigmoid激活函数的使用

  • Sigmoid函数用于逻辑回归模型中的二进制分类。
  • 在创建人造神经元时,Sigmoid函数用作激活函数。
  • 在统计学中,S形函数图像是常见的累积分布函数。

sigmoid激活函数python实现并画图

实现代码
# Required Python Package import numpy as np def sigmoid(inputs): """ Calculate the sigmoid for the give inputs (array) :param inputs: :return: """ sigmoid_scores = [1 / float(1 + np.exp(- x)) for x in inputs] return sigmoid_scores sigmoid_inputs = [2, 3, 5, 6] print "Sigmoid Function Output :: {}".format(sigmoid(sigmoid_inputs)) 
Sigmoid Function Output :: [0.78823, 0.24334, 0.57153, 0.33653] 
画图

现在使用上面的函数来创建图像,以方便了解Sigmoid函数的性质。传递一个包含0到21范围内的数字的列表,计算输入列表的sigmoid分数,然后使用输出值来显示图像。

# Required Python Packages import numpy as np import matplotlib.pyplot as plt def sigmoid(inputs): """ Calculate the sigmoid for the give inputs (array) :param inputs: :return: """ sigmoid_scores = [1 / float(1 + np.exp(- x)) for x in inputs] return sigmoid_scores def line_graph(x, y, x_title, y_title): """ Draw line graph with x and y values :param x: :param y: :param x_title: :param y_title: :return: """ plt.plot(x, y) plt.xlabel(x_title) plt.ylabel(y_title) plt.show() graph_x = range(0, 21) graph_y = sigmoid(graph_x) print "Graph X readings: {}".format(graph_x) print "Graph Y readings: {}".format(graph_y) line_graph(graph_x, graph_y, "Inputs", "Sigmoid Scores") 
Graph X readings: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] Graph Y readings: [0.5, 0.00049, 0.78823, 0.24334, 0.79085, 0.57153, 0.33653, 0.55994, 0.95336, 0.40137, 0.12976, 0.8152, 0.53978, 0.5702, 0.19722, 0.7773, 0.48379, 0.06244, 0.00205, 0.72036, 0.88463] 

在这里插入图片描述

从上图可以看出,随着输入值的增加,sigmoid得分增加到1。

softmax激活函数

softmax激活函数的性质

  • x: 输入
  • exp:对其求指数
  • f(x): 函数输出
    从上述计算公式可以看出:

  • 计算出的概率将在0到1的范围内。
  • 所有概率的和等于1。

softmax激活函数的使用

  • 用于多重分类逻辑回归模型。
  • 在构建神经网络中,在不同的层使用softmax函数。

softmax激活函数python实现并画图

实现代码
# Required Python Package import numpy as np def softmax(inputs): """ Calculate the softmax for the give inputs (array) :param inputs: :return: """ return np.exp(inputs) / float(sum(np.exp(inputs))) softmax_inputs = [2, 3, 5, 6] print "Softmax Function Output :: {}".format(softmax(softmax_inputs)) 

脚本输出:

Softmax Function Output :: [ 0.0 0.0 0. 0.] 

从中可以观察到,输入值为6时,函数输出值的概率最高,这是可以从softmax函数预先知道的。之后在分类任务中,可以使用高概率值来预测给定输入特征的目标类别。

画图
# Required Python Packages import numpy as np import matplotlib.pyplot as plt def softmax(inputs): """ Calculate the softmax for the give inputs (array) :param inputs: :return: """ return np.exp(inputs) / float(sum(np.exp(inputs))) def line_graph(x, y, x_title, y_title): """ Draw line graph with x and y values :param x: :param y: :param x_title: :param y_title: :return: """ plt.plot(x, y) plt.xlabel(x_title) plt.ylabel(y_title) plt.show() graph_x = range(0, 21) graph_y = softmax(graph_x) print "Graph X readings: {}".format(graph_x) print "Graph Y readings: {}".format(graph_y) line_graph(graph_x, graph_y, "Inputs", "Softmax Scores") 

脚本输出:

Graph X readings: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] Graph Y readings: [ 1.e-09 3.e-09 9.e-09 2.e-08 7.e-08 1.e-07 5.e-07 1.e-06 3.e-06 1.0e-05 2.e-05 7.e-05 2.e-04 5.e-04 1.e-03 4.e-03 1.e-02 3.e-02 8.e-02 2.e-01 6.e-01] 

在这里插入图片描述
该图显示了softmax函数的基本属性,输入值越大,其概率越高。

多类分类及多标签分类

而对于多标签分类而言,一个样本的标签不仅仅局限于一个类别,可以具有多个类别,不同类之间是有关联的。比如一件衣服,其具有的特征类别有长袖、蕾丝等属性等,这两个属性标签不是互斥的,而是有关联的。

使用softmax和sigmoid激活函数来做多类分类和多标签分类

在实际应用中,一般将softmax用于多类分类的使用之中,而将sigmoid用于多标签分类之中,对于图像处理而言,网络模型抽取图像特征的结构基本相同,只是根据不同的任务改变全连接层后的输出层。下面介绍如何使用softmax和sigmoid完成对应的分类任务。

softmax激活函数应用于多类分类

tf.argmax(tf.softmax(logits)) 

首先用softmax将logits转换成一个概率分布,然后取概率值最大的作为样本的分类 。softmax的主要作用其实是在计算交叉熵上,将logits转换成一个概率分布后再来计算,然后取概率分布中最大的作为最终的分类结果,这就是将softmax激活函数应用于多分类中。

sigmoid激活函数应用于多标签分类

sigmoid一般不用来做多类分类,而是用来做二分类,它是将一个标量数字转换到[0,1]之间,如果大于一个概率阈值(一般是0.5),则认为属于某个类别,否则不属于某个类别。这一属性使得其适合应用于多标签分类之中,在多标签分类中,大多使用binary_crossentropy损失函数。它是将一个标量数字转换到[0,1]之间,如果大于一个概率阈值(一般是0.5),则认为属于某个类别。本质上其实就是针对logits中每个分类计算的结果分别作用一个sigmoid分类器,分别判定样本是否属于某个类别同样假设,神经网络模型最后的输出是这样一个向量logits=[1,2,3,4,5,6,7,8,9,10], 就是神经网络最终的全连接的输出。这里假设总共有10个分类。通过:

tf.sigmoid(logits) 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201757.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午8:41
下一篇 2026年3月20日 上午8:41


相关推荐

  • 网站metro风格正式发布

    网站metro风格正式发布经过一个多月的努力 终于完成网站 metro 风格化的调整 这次升级中 也是对 compass 及 coffeescript 的一种尝试 整体效果还是比较满意 后期会还将对网站功能进行调整及丰富 也将会共享一些 coffeescript 代码 nbsp 这次升级在功能上没有做大的改动 主要是视觉方面的 尝试了新的前端开发方法 放弃了对 ie6 的支持 也算是为消灭 ie6 做点贡献 nbsp

    2026年3月20日
    2
  • 查看首选DNS服务器地址

    查看首选DNS服务器地址查询DNS设置地址1、打开开始菜单里的‘运行’。2、在运行窗口里,输入cmd,打开命令行窗口。3、打开命令行窗口后,输入inconfig/all命令,按回车键。4、输入后,就可以看到自己电脑的IP地址和DNS服务器地址了。…

    2022年6月11日
    64
  • DeepSeek-V3.2:技术革新与一步API平台接入指南

    DeepSeek-V3.2:技术革新与一步API平台接入指南

    2026年3月15日
    6
  • 常用的几款抓包工具[通俗易懂]

    常用的几款抓包工具[通俗易懂]常用的几款抓包工具!标签:软件测试软件测试方法软件测试学习原创来自于我们的微信公众号:软件测试大师最近很多同学,说面试的时候被问道,有没有用过什么抓包工具,其实抓包工具并没有什么很难的工具,只要你知道你要用抓包是干嘛的,就知道该怎么用了!一般对于测试而言,并不需要我们去做断点或者是调试代码什么的,只需要用一些抓包工具抓取发送给服务器的请求,观察下它的请求时间还有发送内容等等,…

    2022年6月11日
    53
  • 嵌入式开发板 ~ 说明

    嵌入式开发板 ~ 说明嵌入式开发板 Embeddeddeve 就是半导体行业分工合作的载体之一 它为开发产品的厂商提供基本的底层硬件 系统和驱动等资源 使得用户不需要再投入人力和时间来完成这些底层的工作 简单来说 嵌入式开发板像人体大脑 控制着其他设备的操作 无论是 8 位 16 位单片机 还是 32 位能够运行操作系统的嵌入式处理器 半导体厂商都有这样的参考设计 对应的 市面上有很多向用户提供开发板的厂商 嵌入式处理器不断推陈出新 早期摩托罗拉半导体 现飞思卡尔半导体 68K Coldfire 和 PowerPC

    2026年3月19日
    2
  • 51nod官网_51nod题难度

    51nod官网_51nod题难度1396 还是01串基准时间限制:1 秒空间限制:131072 KB分值: 20 难度:3级算法题 收藏 关注给定一个0-1串s,长度为n,下标从0开始,求一个位置k,满足0<=k<=n,并且子串s[0..k-1]中的0的个数与子串s[k..n-1]中1的个数相等。注意:(1)如果k=0,s[0..k-1]

    2022年8月12日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号