神经网络常用激活函数对比: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

目录
相关文章
|
25天前
|
开发者 Python
Python入门:8.Python中的函数
### 引言 在编写程序时,函数是一种强大的工具。它们可以将代码逻辑模块化,减少重复代码的编写,并提高程序的可读性和可维护性。无论是初学者还是资深开发者,深入理解函数的使用和设计都是编写高质量代码的基础。本文将从基础概念开始,逐步讲解 Python 中的函数及其高级特性。
Python入门:8.Python中的函数
|
17天前
|
C语言 Python
Python学习:内建属性、内建函数的教程
本文介绍了Python中的内建属性和内建函数。内建属性包括`__init__`、`__new__`、`__class__`等,通过`dir()`函数可以查看类的所有内建属性。内建函数如`range`、`map`、`filter`、`reduce`和`sorted`等,分别用于生成序列、映射操作、过滤操作、累积计算和排序。其中,`reduce`在Python 3中需从`functools`模块导入。示例代码展示了这些特性和函数的具体用法及注意事项。
|
17天前
|
Go Python
Python中的round函数详解及使用示例
`round()`函数是Python内置的用于四舍五入数字的工具。它接受一个数字(必需)和可选的小数位数参数,返回最接近的整数或指定精度的浮点数。本文详细介绍其用法、参数及示例,涵盖基本操作、负数处理、特殊情况及应用建议,帮助你更好地理解和运用该函数。
|
18天前
|
人工智能 数据库连接 开发工具
[oeasy]python069_当前作用域都有些什么_列表dir_函数_builtins
本文介绍了Python中`dir()`函数的使用方法及其作用。`dir()`可以列出当前作用域内的所有变量和成员,类似于`locals()`,但`dir()`不仅限于本地变量,还能显示模块中的所有成员。通过`dir(__builtins__)`可以查看内建模块中的所有内建函数,如`print`、`ord`、`chr`等。此外,还回顾了`try-except-finally`结构在数据库连接中的应用,并解释了为何`print`函数可以直接使用而无需导入,因为它位于`__builtins__`模块中。最后,简要提及了删除`__builtins__.print`的方法及其影响。
33 0
|
2月前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
40 3
|
2月前
|
JSON 监控 安全
深入理解 Python 的 eval() 函数与空全局字典 {}
`eval()` 函数在 Python 中能将字符串解析为代码并执行,但伴随安全风险,尤其在处理不受信任的输入时。传递空全局字典 {} 可限制其访问内置对象,但仍存隐患。建议通过限制函数和变量、使用沙箱环境、避免复杂表达式、验证输入等提高安全性。更推荐使用 `ast.literal_eval()`、自定义解析器或 JSON 解析等替代方案,以确保代码安全性和可靠性。
64 2
|
3月前
|
人工智能 安全 网络安全
揭秘网络危机模拟:现场vs.虚拟,未来创新何在?
揭秘网络危机模拟:现场vs.虚拟,未来创新何在?
|
2月前
|
存储 人工智能 Python
[oeasy]python061_如何接收输入_input函数_字符串_str_容器_ 输入输出
本文介绍了Python中如何使用`input()`函数接收用户输入。`input()`函数可以从标准输入流获取字符串,并将其赋值给变量。通过键盘输入的值可以实时赋予变量,实现动态输入。为了更好地理解其用法,文中通过实例演示了如何接收用户输入并存储在变量中,还介绍了`input()`函数的参数`prompt`,用于提供输入提示信息。最后总结了`input()`函数的核心功能及其应用场景。更多内容可参考蓝桥、GitHub和Gitee上的相关教程。
34 0
|
3月前
|
Python
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
78 18
|
3月前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
105 8

热门文章

最新文章