Sigmoid 与Softmax 作为网络输出层的激活函数及分别对应的交叉熵损失函数

网络最后一层的激活函数都是为了将输出的数据明显的区分开。

1、Sigmoid

数学式子:

Sigmoid(x)=\frac{1}{1+e^{-x}}

导数:

Sigmoid(x){}'=\frac{1}{1+e^{-x}}\cdot \left ( 1- \frac{1}{1+e^{-x}} \right )=Sigmoid(x)\cdot(1-Sigmoid(x))

绘图:(口诀 5点3线)

Sigmoid 与Softmax 作为网络输出层的激活函数及分别对应的交叉熵损失函数_第1张图片

代码:

import matplotlib.pylot as plt
import numpy as np

def Sigmoid(x):
    return 1.0/(1.0+ np.exp(-x))

def PlotSigmoid():
    x = np.arange(-10, 10, 0.1)
    y = Sigmoid(x)
    plt.plot(x, y)
    plt.show()

if __name__ == '__main__':
    PlotSigmoid()

Simgoid()作为网络输出层的激活函数(二分类), 应用binary_crossentropy 配合使用。

2、Softmax

作用:将最后输出的N个类别feature map,逐像素 进行N极分化。

数学式子:

假设 输入数据是[x1, x2, x3 ], 经过Softmax函数后得到:

Softmax(x_{1})=\frac {e^{x_{1}}} { \sum_{1}^{3} e^{x_{i}}}

Softmax(x_{2})=\frac {e^{x_{2}}} { \sum_{1}^{3} e^{x_{i}}}

Softmax(x_{3})=\frac {e^{x_{3}}} { \sum_{1}^{3} e^{x_{i}}}

语义分割网络最后的Softmax激活:

Sigmoid 与Softmax 作为网络输出层的激活函数及分别对应的交叉熵损失函数_第2张图片

代码:

def Softmax(x):
    return np.exp(x)/np.sum(np.exp(x))


input = np.array([1,2,3])
output = Softmax(input)

Softmax()作为网络输出层的激活函数(多分类), 应用categorical_crossentropy() 配合使用

详细可见:https://blog.csdn.net/koreyoshichen/article/details/84823636

                  https://blog.csdn.net/heyc861221/article/details/80127148

                  https://www.cnblogs.com/marsggbo/p/10401215.html

你可能感兴趣的:(Sigmoid 与Softmax 作为网络输出层的激活函数及分别对应的交叉熵损失函数)