激活函数-sigmoid 作者:马育民 • 2019-10-23 09:59 • 阅读:10352 # 概述 将线性回归的 **结果** 作为 **x**,通过sigmoid函数计算,输出 **概率值 y** **注意:** 在 **神经网络中** 很少用在中间层,一般用在 **输出层**,解决 **二分类问题** # sigmoid 函数 [![](https://www.malaoshi.top/upload/0/0/1EF3xWjgkbzo.png)](https://www.malaoshi.top/upload/0/0/1EF3xWjgkbzo.png) x就是 **线性回归** 的 **结果** ### 函数图像 [![](https://www.malaoshi.top/upload/0/0/1EF4IKOtdihv.png)](https://www.malaoshi.top/upload/0/0/1EF4IKOtdihv.png) ### 特点 1. x值接近0时,非常陡峭,y值变化非常大 2. x值远离0时,越平缓,y值变化不大 3. **输出值** 在 **0~1 之间** 4. 连续可导 ### 作用 由于 **输出值** 在 **0~1 之间**,所以一般用在 **输出层** ,解决 **二分类** 问题 ### 缺点 1. 计算量大,反向传播时,求导需要用除法 1. 当x过大、过小时,函数值变化小,梯度容易消失,不利于 **后向传播** ### 实现 ##### python方式 ``` y=1/(1+math.e**-x) ``` ##### numpy方式 ``` y=1/(1+np.exp(-x)) ``` ##### tensorflow方式 ``` y=tf.sigmoid(x) ``` 详见: https://www.malaoshi.top/show_1EF5DLAuBptO.html # sigmoid 导数 公式:`f′(x)=s(x) * (1−s(x))` > s(x) 是 sigmoid 函数 ### 函数图像 [![](https://www.malaoshi.top/upload/0/0/1EF4IKf4DGc4.png)](https://www.malaoshi.top/upload/0/0/1EF4IKf4DGc4.png) ### 实现sigmoid函数和导数 ##### 定义sigmoid函数及其导数 ``` import math import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager as fm def sigmoid(x): return (1/(1+math.e**-x)) # 导数函数 def d_sigmoid(x): return sigmoid(x)*(1-sigmoid(x)) ``` ##### 生成数据 ``` x_arr=np.linspace(-10,10,200) y_arr=sigmoid(x_arr) x_d_arr=np.linspace(-10,10,200) y_d_arr=d_sigmoid(x_d_arr) ``` ##### 画出图像 ``` plt.figure(figsize=(10,6)) plt.plot(x_arr,y_arr,label='sigmoid') plt.plot(x_d_arr,y_d_arr,label='der sigmoid') plt.grid(axis='both',alpha=0.5) plt.legend(loc='upper left') plt.show() ``` ### 注意 作为激活函数时,可能会引发梯度消失 https://www.malaoshi.top/show_1EF5UETXH6tN.html 原文出处:http://malaoshi.top/show_1EF4IWSucFTE.html