神经网络常用激活函数对比:sigmoid VS sofmax(附python源码)

简介: 本文介绍了神经网络中的两种常用激活函数——softmax与sigmoid函数,简单介绍了其基本原理、性质及其使用,并用python进行了实例化演示,在文章的最后总结了两种激活函数的区别。

首发地址:https://yq.aliyun.com/articles/73661

更多深度文章,请关注:https://yq.aliyun.com/cloud

Softmax函数与Sigmoid函数之间的区别

作者介绍:

f4fc34dbd7db4870aaad8adbe6801f02712e0bff

Saimadhu Polamuri是一名自学成才的数据科学家,对数据科学有热爱和兴趣,他认为学习意味着生活,擅长使用python编程,业余时间在quora上回答问题。

领英:https://www.linkedin.com/in/saimadhu/

博客http://dataaspirant.com/author/saimadhu/

0a68f8e4007c67a30d310d506bd56c8951d7539b

Softmax函数VS Sigmoid函数
在学习逻辑回归概念时,主要的困惑于计算概率的函数由于在逻辑回归模型会使用计算的概率预测目标类经常用到的两个函数SoftmaxSigmoid函数
函数水平(帮助预测目标类别)上来看,这两个函数是相同的,但存在许多明显的数学差异应用在深度学习和其他领域中,发挥至关重要的作用。
所以在这篇文章中将进一步了解这两个函数及其应用之间的根本区别。
在开始之前,介绍本文的目录

  • 什么是S型函数
  • S形函数性质
  • Sigmoid函数使用
  • Python中实现Sigmoid函数
  • 创建Sigmoid函数图像 
  • 什么是Softmax函数
  • Softmax函数的性质
  • Softmax函数使用
  • Python中实现Softmax函数
  • 创建Softmax函数图像 
  • Sigmoid函数与Softmax函数之间的差异
  • 结论 

什么是S函数

数学定义上来看,Sigmoid函数取任何范围实数,返回输出值在01的范围内。S形函数产生“S”曲线这些曲线也用于统计使用累积分布函数(输出范围为01
S函数性质

  • sigmoid函数返回一个实值输出。
  • S形函数的一阶导数是非负的或非正的。

  1. 非负数:如果数字大于或等于零。
  2. 非正数:如果数字小于或等于零。

Sigmoid函数的使用

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

现在让我们Python中实现sigmoid函数 

# 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函数的实现代码

  • 该函数将以列表形式的值作为输入参数。
  • 列表中的每个元素/值将被视为Sigmoid函数的输入,并计算输出值。
  • 代码 1 / float(1 + np.exp(-x))是用于计算sigmoid分数的函数。
  • 接下来,我们将一个列表sigmiod_inputs作为函数输入,列表值为2,3,5,6,经过sigmoid函数计算后获得Sigmoid分数。 

脚本输出 

Sigmoid Function Output :: [0.8807970779778823, 0.9525741268224334, 0.9933071490757153, 0.9975273768433653]

创建Sigmoid函数图像
现在使用上面的函数来创建图像,以方便了解Sigmoid函数的性质。

  • 传递一个包含021范围内的数字的列表。
  • 计算输入列表的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")

  • 创建一个包含021范围内的数字的graph_x列表。
  • 之后graph_y列表中,存储给定graph_x输入的计算sigmoid分数。
  • 调用line_graph函数,该函数采用图像xy和标题来创建线形图。 

脚本输出

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.7310585786300049, 0.8807970779778823, 0.9525741268224334, 0.9820137900379085, 0.9933071490757153, 0.9975273768433653, 0.9990889488055994, 0.9996646498695336, 0.9998766054240137, 0.9999546021312976, 0.999983298578152, 0.9999938558253978, 0.999997739675702, 0.9999991684719722, 0.999999694097773, 0.9999998874648379, 0.9999999586006244, 0.9999999847700205, 0.9999999943972036, 0.9999999979388463]

图像

成功运行上述代码后,屏幕上将显示以下图像。如果上述代码在你的系统中运行失败。检查机器学习包设置。 

2af24904fb9e1b80b569e854d65561ab3e0f697e

从上图可以看出,随着输入值的增加,sigmoid得分增加到1。图的顶部表示在0.90.99范围内
什么是Softmax函数

ca81779093824ed50a586b53a6d102e83eb97d27

Softmax函数计算事件超过'n'个不同事件的概率分布。一般来说,这个函数将会计算每个目标类在所有可能的目标类中的概率。计算的概率将有助于确定给定输入的目标类
使用Softmax的主要优点是输出概率范围范围为01,所有概率的和将等于1。如果softmax函数用于多分类模型,它会返回每个类的概率,并且目标类别的概率值会很大指数公式计算给定输入值的指数和输入中所有值的指数值之和。那么输入值的指数与指数值之和的比值就是softmax函数的输出。 

Softmax函数的性质

以下是softmax函数的几个性质

  • 计算出的概率将在01的范围内。
  • 所有概率的和等于1
Softmax函数的 使用

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


Python中实现Softmax函数
现在让我们在Python中实现softmax函数:

# 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.01275478  0.03467109  0.25618664  0.69638749]

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

创建Softmax函数图像
现在让我们使用实现的Softmax函数创建图像来了解这个函数的表现

  • 创建一个包含021范围内的值的列表。
  • 之后将通过此列表来计算已实现函数的分数。
  • 使用列表和估计分数创建图像。
# 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.30289758e-09 3.54164282e-09 9.62718331e-09 2.61693975e-08 7.11357976e-08 1.93367146e-07 5.25626399e-07 1.42880069e-06 3.88388295e-06 1.05574884e-05 2.86982290e-05 7.80098744e-05 2.12052824e-04 5.76419338e-04 1.56687021e-03 4.25919483e-03 1.15776919e-02 3.14714295e-02 8.55482149e-02 2.32544158e-01 6.32120559e-01]

图像  

c1385c479881cefd367307909716f29cbbae380a

该图显示了softmax函数的基本属性值越大,其概率越高
Sigmoid函数与Softmax函数之间的差异
以下是SigmoidSoftmax函数之间的差异表格:

56a1f13aeac2e59c5c725f9ec93c4f5bd7ea801d                        

结论
在本文中,详细了解确定逻辑回归模型的两个函数。

  • Softmax:用于多分类任务。
  • Sigmoid用于二进制分类任务。

附件为原文的pdf

本文由北邮@爱可可-爱生活老师推荐,阿里云云栖社区组织翻译。

文章原标题《Difference Between Softmax Function and Sigmoid Function》,作者Saimadhu Polamuri,译者:海棠,审阅:

文章为简译,更为详细的内容,请查看原文

Wechat:269970760 

Email:duanzhch@tju.edu.cn

微信公众号:AI科技时讯

157f33dddfc596ede3681e0a2a0e7068dc288cc1

目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
348 55
|
5天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
42 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
23天前
|
安全 Linux 网络安全
利用Python脚本自动备份网络设备配置
通过本文的介绍,我们了解了如何利用Python脚本自动备份网络设备配置。该脚本使用 `paramiko`库通过SSH连接到设备,获取并保存配置文件。通过定时任务调度,可以实现定期自动备份,确保网络设备配置的安全和可用。希望这些内容能够帮助你在实际工作中实现网络设备的自动化备份。
48 14
|
2月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
220 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
1月前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
32 3
|
1月前
|
JSON 监控 安全
深入理解 Python 的 eval() 函数与空全局字典 {}
`eval()` 函数在 Python 中能将字符串解析为代码并执行,但伴随安全风险,尤其在处理不受信任的输入时。传递空全局字典 {} 可限制其访问内置对象,但仍存隐患。建议通过限制函数和变量、使用沙箱环境、避免复杂表达式、验证输入等提高安全性。更推荐使用 `ast.literal_eval()`、自定义解析器或 JSON 解析等替代方案,以确保代码安全性和可靠性。
42 2
|
2月前
|
人工智能 安全 网络安全
揭秘网络危机模拟:现场vs.虚拟,未来创新何在?
揭秘网络危机模拟:现场vs.虚拟,未来创新何在?
|
30天前
|
存储 人工智能 Python
[oeasy]python061_如何接收输入_input函数_字符串_str_容器_ 输入输出
本文介绍了Python中如何使用`input()`函数接收用户输入。`input()`函数可以从标准输入流获取字符串,并将其赋值给变量。通过键盘输入的值可以实时赋予变量,实现动态输入。为了更好地理解其用法,文中通过实例演示了如何接收用户输入并存储在变量中,还介绍了`input()`函数的参数`prompt`,用于提供输入提示信息。最后总结了`input()`函数的核心功能及其应用场景。更多内容可参考蓝桥、GitHub和Gitee上的相关教程。
16 0
|
2月前
|
Python
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
64 18
|
2月前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
85 8

热门文章

最新文章