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

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

更多深度文章,请关注: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,译者:海棠,审阅:

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

 

 

相关文章
|
7天前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
8天前
|
Python
Python中的异步编程:使用asyncio和aiohttp实现高效网络请求
【10月更文挑战第34天】在Python的世界里,异步编程是提高效率的利器。本文将带你了解如何使用asyncio和aiohttp库来编写高效的网络请求代码。我们将通过一个简单的示例来展示如何利用这些工具来并发地处理多个网络请求,从而提高程序的整体性能。准备好让你的Python代码飞起来吧!
24 2
|
15天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
59 6
|
19天前
|
安全 网络安全 数据安全/隐私保护
|
24天前
|
存储 网络安全 数据安全/隐私保护
|
16天前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
39 4
|
20天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
65 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
54 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
1月前
|
机器学习/深度学习 编解码
深度学习笔记(三):神经网络之九种激活函数Sigmoid、tanh、ReLU、ReLU6、Leaky Relu、ELU、Swish、Mish、Softmax详解
本文介绍了九种常用的神经网络激活函数:Sigmoid、tanh、ReLU、ReLU6、Leaky ReLU、ELU、Swish、Mish和Softmax,包括它们的定义、图像、优缺点以及在深度学习中的应用和代码实现。
116 0
深度学习笔记(三):神经网络之九种激活函数Sigmoid、tanh、ReLU、ReLU6、Leaky Relu、ELU、Swish、Mish、Softmax详解
|
1月前
|
运维 安全 网络协议
Python 网络编程:端口检测与IP解析
本文介绍了使用Python进行网络编程的两个重要技能:检查端口状态和根据IP地址解析主机名。通过`socket`库实现端口扫描和主机名解析的功能,并提供了详细的示例代码。文章最后还展示了如何整合这两部分代码,实现一个简单的命令行端口扫描器,适用于网络故障排查和安全审计。