激活函数(activation function)运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经网络。神经网络之所以能解决非线性问题(如语音、图像识别),本质上就是激活函数加入了非线性因素,弥补了线性模型的表达力,把“激活的神经元的特征”通过函数保留并映射到下一层。
因为神经网络的数学基础是处处可微的,所以选取的激活函数要能保证数据输入与输出也是可微的。那么激活函数在 TensorFlow 中是如何表达的呢?激活函数不会更改输入数据的维度,也就是输入和输出的维度是相同的。TensorFlow 中有如下激活函数,它们定义在 tensorflow-1.1.0/tensorflow/python/ops/nn.py 文件中,这里包括平滑非线性的激活函数,如 sigmoid、tanh、elu、softplus 和 softsign,也包括连续但不是处处可微的函数 relu、relu6、crelu 和 relu_x,以及随机正则化函数 dropout
#4,激活函数的使用
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf# fake data
x = np.linspace(-5, 5, 200) #产生-5至5之间200个点
y_relu = tf.nn.relu(x)#定义relu激活函数,输入数据点
y_sigmoid = tf.nn.sigmoid(x)#定义sigmod激活函数,输入数据点
y_tanh = tf.nn.tanh(x)#定义tanh激活函数,输入数据点
y_softplus = tf.nn.softplus(x)#定义softplus,输入数据点
sess = tf.Session()#创建session
y_relu, y_sigmoid, y_tanh, y_softplus = sess.run([y_relu, y_sigmoid, y_tanh, y_softplus])#生成激活函数#绘制relu的图像
plt.figure(1, figsize=(8, 6))
plt.subplot(221)
plt.plot(x, y_relu, c='red', label='relu')
plt.ylim((-1, 5))
plt.legend(loc='best')#绘制sigmoid的图像
plt.subplot(222)
plt.plot(x, y_sigmoid, c='red', label='sigmoid')
plt.ylim((-0.2, 1.2))
plt.legend(loc='best')#绘制tanh的图像
plt.subplot(223)
plt.plot(x, y_tanh, c='red', label='tanh')
plt.ylim((-1.2, 1.2))
plt.legend(loc='best')#绘制softplus的图像
plt.subplot(224)
plt.plot(x, y_softplus, c='red', label='softplus')
plt.ylim((-0.2, 6))
plt.legend(loc='best')plt.show()
输出结果: