在tensorflow模型中通常会涉及二分类以及多分类问题。
对于传统的二分类问题,我们可以设定输出层只有一个节点,设定阈值确定待预测样本的分类。(例如如下判断零件是否合格的神经网络结构)
但是对于多分类问题时,我们的输出层节点数通常设定与分类种类数目相同,面对多个输出节点的情况,我们同样可以设定多个阈值的办法实现分类,然而这种分类方法不够灵活,当我们的模型还未接近极优时,这种分类方法通常会失效,比如在阈值之间出现两个符合情况的输出。对此,我们可以运用softmax方法很好的解决多分类问题。
我们先来直观看一下,Softmax究竟是什么意思:
我们知道max,假如说我有两个数,a和b,并且a>b,如果取max,那么就直接取a,没有第二种可能,但有的时候我不想这样,因为这样会造成分值小的那个饥饿。所以我希望分值大的那一项经常取到,分值小的那一项也偶尔可以取到,那么我用softmax就可以了 现在还是a和b,a>b,如果我们取按照softmax来计算取a和b的概率,那a的softmax值大于b的,所以a会经常取到,而b也会偶尔取到,概率跟它们本来的大小有关。(转载)(详解softmax数学推导过程)下面结合代码感受一下softmax。
import tensorflow as tf
a = tf.constant([ -1.0 , 0 , 1.0 , 2.0 , 3.0 ])
a_softmax = tf.nn.softmax(logits)
with tf.Session() as sess:
print(sess.run(y))
输出结果:
[0.01165623 0.03168492 0.08612854 0.23412165 0.6364086 ]
可以看出softmax可以根据大小计算出每一个输出在总输出的概率,从而确定分类,同时,在我们训练中,通常提供的label信息为(以mnist 数字2为例)[ 0 , 0 ,1,0,0,0,0,0,0,0] ,使用softmax处理输出层可以使我们更好定义损失函数。