> For the complete documentation index, see [llms.txt](https://baozoulin.gitbook.io/tensorflow/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://baozoulin.gitbook.io/tensorflow/chapter1/ji-li-han-shu.md).

# 激励函数

![](https://morvanzhou.github.io/static/results/ML-intro/active3.png)

**AF** 就是指的**激励函数**，是一个**非线性函数**. 比如说**relu**, **sigmoid**, **tanh**.

**激励函数**运行时激活神经网络中某一部分神经元，将激活信息向后传入下一层的神经系统

套在原有的结果之上, 强行把原有的线性结果给扭曲. 使输出结果 y 也有了非线性的特征

**激励函数**必须是可以微分的, 因为在 **backpropagation** **误差反向传递**的时候, 只有这些可微分的激励函数才能把误差传递回去.

## 常用选择

![](https://morvanzhou.github.io/static/results/ML-intro/active4.png)

当**神经网络层**只有两三层, 不是很多的时候, 对于**隐藏层**, 使用任意的**激励函数**, 随便掰弯是可以的, 不会有特别大的影响.

当使用特别多层的**神经网络**, 在掰弯的时候, 不得随意选择利器. 因为会涉及到**梯度爆炸**, **梯度消失**的问题.

在少量层结构中, 可以尝试很多种不同的激励函数.

在**卷积神经网络 Convolutional neural networks** 的**卷积层**中, 推荐的**激励函数**是 **relu**

在**循环神经网络中 recurrent neural networks**, 推荐的是 **tanh** 或者是 **relu**

```python
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

# fake data
x = np.linspace(-5, 5, 200)     # x data, shape=(100, 1)

# following are popular activation functions
y_relu = tf.nn.relu(x)
y_sigmoid = tf.nn.sigmoid(x)
y_tanh = tf.nn.tanh(x)
y_softplus = tf.nn.softplus(x)
# y_softmax = tf.nn.softmax(x)  softmax is a special kind of activation function, it is about probability

sess = tf.Session()
y_relu, y_sigmoid, y_tanh, y_softplus = sess.run([y_relu, y_sigmoid, y_tanh, y_softplus])

# plt to visualize these activation function
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')

plt.subplot(222)
plt.plot(x, y_sigmoid, c='red', label='sigmoid')
plt.ylim((-0.2, 1.2))
plt.legend(loc='best')

plt.subplot(223)
plt.plot(x, y_tanh, c='red', label='tanh')
plt.ylim((-1.2, 1.2))
plt.legend(loc='best')

plt.subplot(224)
plt.plot(x, y_softplus, c='red', label='softplus')
plt.ylim((-0.2, 6))
plt.legend(loc='best')

plt.show()
```

![](/files/-Le0cKUpyWms-hWrbBuj)
