TensorFlow学习记录:激活函数

激活函数的主要作用就是用来加入非线性因素的,以解决线性模型不能进行多分类的问题,在整个神经网络里起到非常重要的作用。
因为神经网络的数学基础是处处可微的,所以选取的激活函数要能保证数据输入与输出也是可微的。
神经网络中常用的激活函数有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学习记录:激活函数_第1张图片
在TensorFlow中对应的函数为

tf.nn.sigmoid(x,name)

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

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

从Sigmoid函数的图像看,貌似当x∈[-5,5]时有比较明显的梯度,但当x超过[-5,5]时梯度已经逐渐消失。

你可能感兴趣的:(深度学习,TensorFlow,TensorFlow,激活函数)