激活函数-softmax 作者:马育民 • 2019-09-12 13:55 • 阅读:10666 需要了解:[激活函数](https://www.malaoshi.top/show_1EF3rzCm0GFL.html "激活函数") # 概述 **softmax** 激活函数 用于解决 **多分类** 问题 ### 作用 [![](https://www.malaoshi.top/upload/0/0/1EF4ME3Ym8nf.png)](https://www.malaoshi.top/upload/0/0/1EF4ME3Ym8nf.png) 如上图模型,当解决多分类问题时,需要用 **softmax函数**,将前一层的结果变为 **概率分布** ### 公式 [![](https://www.malaoshi.top/upload/0/0/1EF43MVKJ0ft.png)](https://www.malaoshi.top/upload/0/0/1EF43MVKJ0ft.png) **解释:** - z是线性回归的结果,即:z=wx+b - j是 输出层神经元的 **数量** ### 例子 上图中 **概率1** 的计算方式: [![](https://www.malaoshi.top/upload/0/0/1EF4MEH4YmV4.png)](https://www.malaoshi.top/upload/0/0/1EF4MEH4YmV4.png) ### 注意 - softmax要求每个样本 **必须属于** 某个类别,且所有可能的样本均被覆盖 - 经过softmax函数计算后,所有样本的 **概率之和 为 1** - 当只有两个类别时,与sigmoid相同 # keras ### 损失函数 在keras中,对于多分类问题使用下面两个损失函数: - categorical_crossentropy 目标值是one-hot独热编码的 - sparse_categorical_crossentropy 当目标值是顺序数字时,用此损失函数 与softmax匹配的损失函数详见: https://www.malaoshi.top/show_1EF4La0KENhc.html # 验证 先通过keras算出softmax结果,然后通过手动实现softmax计算,将两次结果比对 为了不受干扰,验证softmax运算过程,建立简单的神经网络,如下图: [![](https://www.malaoshi.top/upload/0/0/1EF4ME3Ym8nf.png)](https://www.malaoshi.top/upload/0/0/1EF4ME3Ym8nf.png) 按照上图建立模型,如下: ``` 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 ``` 原文出处:http://malaoshi.top/show_1EF43MehJmCw.html