TensorFlow学习记录:激活函数

激活函数在神经网络中至关重要,引入非线性,解决线性模型的多分类问题。本文详细介绍了Sigmoid、Tanh、ReLU、Swish等函数,包括它们的数学公式、优缺点以及在TensorFlow中的实现。ReLU因运算简单和稀疏性好而广泛应用,但存在死亡神经元问题,衍生出了Leaky ReLU和Elu等变种。Swish函数则被发现比ReLU表现更优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

激活函数的主要作用就是用来加入非线性因素的,以解决线性模型不能进行多分类的问题,在整个神经网络里起到非常重要的作用。
因为神经网络的数学基础是处处可微的,所以选取的激活函数要能保证数据输入与输出也是可微的。
神经网络中常用的激活函数有Sigmoid、Tanh和Relu等。

1.Sigmoid函数

Sigmoid函数的数学公式为

f ( x ) = 1 1 + e − x f(x)=\tfrac{1}{1+e^{-x}} f(x)=1+ex1

用matplotlib画出Sigmoid函数及其导数的图像

# 在matplotlib中,默认有4个轴,两个横轴和两个竖轴,可以通过ax=plt.gca()方法获取,
# gca是“get current axes”的缩写,即获取图像的轴,这四个轴分别是top,bottom,left和right
# 由于axes会获取到四个轴,而我们只需要两个轴,所以我们需要把另外两个轴隐藏,把顶部和右边的轴的颜色设置为none后,这两个轴将不会显示
# 由于我们要画出Sigmoid函数的及其导数的图像,并且我们还知道Sigmoid值域为(0,1),所以我们设置y轴的位置为Sigmoid函数y=0的位置,设置x轴的位置为Sigmoid函数x=0的位置
# 
# 
# plt.legend(loc=?,frameon=?)

# loc(设置图例显示的位置)
# 'best'         : 0, (only implemented for axes legends)(自适应方式)
# 'upper right'  : 1,
# 'upper left'   : 2,
# 'lower left'   : 3,
# 'lower right'  : 4,
# 'right'        : 5,
# 'center left'  : 6,
# 'center right' : 7,
# 'lower center' : 8,
# 'upper center' : 9,
# 'center'       : 10,
# 
# ncol(设置列的数量,使显示扁平化,当要表示的线段特别多的时候会有用)
# 
# 
# 

import math
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-10,10,100)  # 生成一个x∈[-10,10]且长度为100的等差数列
a = np.array(x)
y1 = 1/(1+math.e**(-a))
y2 = math.e**(-a)/((1+math.e**(-a))**2)
plt.xlim(-11,11)  # 设定x轴范围
plt.ylim(0,1)
ax = plt.gca()    # 获得坐标对象 
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom') # 设置x轴坐标刻度的位置,在x轴的下面
ax.yaxis.set_ticks_position('left')   # 设置y轴坐标刻度的位置,在y轴的左边
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
plt.plot(x,y1,label='Sigmoid',linestyle="-",color="blue")
plt.plot(x,y2,label='Deriv.Sigmoid',linestyle="-",color="red")
plt.legend(['Sigmoid,Deriv.Sigmoid'])               # 显示图例
plt.legend(loc='upper left',frameon=True)  # frameon:默认值True为绘制边框,如果为False则不绘制边框
plt.show()
# plt.savefig('plot_test.png',dpi=500)

运行结果如图(蓝色的曲线为Sigmoid函数的图像,红色的曲线为Sigmoid函数导数的图像)
在这里插入图片描述
在TensorFlow中对应的函数为

tf.nn.sigmoid(x,name)

Sigmoid函数曲线如上图所示,其中定义域为[-∞,+∞],但对应的值域为(0,1)。所以,经过Sigmoid函数输出的函数都会落在0~1区间内。

从图像上看,随着x趋于正无穷或者负无穷,y的值越来越接近0或者1,者中情况叫做饱和。处于饱和态的函数意味者,假如输入一个100和一个1000,经过Sigmoid函数后的反映都是一样的,这样的特性相当于将1000大于100十倍这个信息给丢失了。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值