激活函数-sigmoid(解决二分类问题)

概述

将线性回归的 结果 作为 x,通过sigmoid函数计算,输出 概率值 y

注意:
在 神经网络中 很少用在中间层,一般用在 输出层,解决 二分类问题

sigmoid 函数

x就是 线性回归 的 结果

函数图像

特点

  1. x值接近0时,非常陡峭,y值变化非常大
  2. x值远离0时,越平缓,y值变化不大
  3. 输出值 在 0~1 之间
  4. 连续可导

作用

由于 输出值 在 0~1 之间,所以一般用在 输出层 ,解决 二分类 问题

缺点

  1. 计算量大,反向传播时,求导需要用除法
  2. 当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 函数

函数图像

实现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


原文出处:/show_1EF4IWSucFTE.html