需要了解:激活函数
概述
softmax 激活函数 用于解决 多分类 问题
作用
如上图模型,当解决多分类问题时,需要用 softmax函数,将前一层的结果变为 概率分布
公式
对于输入:
z = [z_1,z_2,\ldots,z_n]
softmax 计算每个元素的输出:
\text{softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^n e^{z_j}}
\text{j} = 1,2,3, \ldots ,n
解释:
z是线性回归的结果,即:z=wx+b
特征
- 输出值在
(0, 1)之间; - 所有输出值之 和为 1;
- 指数特性会放大数值差异(大值更大,小值更小),适合突出“最可能的类别”。
例子
注意
softmax要求每个样本 必须属于 某个类别,且所有可能的样本均被覆盖
当只有两个类别时,与
sigmoid相同
keras
损失函数
在keras中,对于多分类问题使用下面两个损失函数:
- categorical_crossentropy
目标值是one-hot独热编码的 - sparse_categorical_crossentropy
当目标值是顺序数字时,用此损失函数
与softmax匹配的损失函数详见:
https://www.malaoshi.top/show_1EF4La0KENhc.html
验证
先通过keras算出softmax结果,然后通过手动实现softmax计算,将两次结果比对
为了不受干扰,验证softmax运算过程,建立简单的神经网络,如下图:
按照上图建立模型,如下:
import tensorflow as tf
model=tf.keras.Sequential()
model.add(tf.keras.layers.Dense(4,input_shape=(1,),activation='softmax'))
model.summary()
获取权重
w,b=model.layers[0].get_weights()
w,b
预测值,为了不受干扰,预测的是1
model.predict([1])
numpy验证
import numpy as np
# 由于初始化时,b=0,且x=1,所以真正有效的就是w
p=np.exp(w)
p
sum_p=np.sum(p)
sum_p
g=p/sum_p

