机器学习—神经网络的Softmax输出
为了建立一个能进行多类分类的神经网络,将采用Softmax回归模型,把它放入神经网络的输出层,如何实现?
当我们用两门课做手写数字识别的时候,我们使用这种架构的神经网络,如果你现在想用十个类进行手写数字分类,从零到九的所有数字,然后改变这个神经网络,使其有十个输出单元,这个新的输出层将是一个软最大输出层(Softmax),所以有时我们会说这个神经网络有一个软最大输出或者这个输出层是软最大层,在这个神经网络中的传播工作给出了一个输入,得到与前面完全相同的计算,然后得到,第二个隐藏层的激活也得到了与以前完全相同的计算,现在必须计算这个输出层的激活a3,这就是它的工作原理。如果你有十个输出类,将会计算Z1,Z2,到Z10,使用这些表达式,Z1=W1*a2+b,注意是乘上一层的激活加上b以此类推,从Z1到Z10,然后计算对y=1的概率估计a1,为了完整起见,如果你想指出这些是与第三层相关的数量,那么应该在所有参数的上边加上上标3,这里的Z31表示这是与这个神经网络第三层的第一个单元相关的参数,有了这个,SoftMax输出层现在提供擦除这十个可能的输出标签中任何一个的机会估计,对于SoftMax层或SoftMax激活函数,在一个方面不同,与我们目前看到的其他激活函数相比,像Z状结肠,Relu和线性,当我们观察Z状结肠或Relu或线性激活函数时,a1只是z1的函数,换句话说,获取激活值,我们可以应用激活函数,不管是Z状结肠还是其他什么,但是有了Softmax激活功能,注意a1是z1,z2,z3.....z10的函数,所以每个激活值都依赖于z的所有值,这是一个对softmax输出来说有点独特的属性。换句话说,如果你想从1到10,它是z1函数的同时也是z10的函数,这与我们目前看到的其他激活函数不同。
最后,如何在TensorFlow中实现这一点?
以下是类似于以前这样做的代码,指定和训练模型有三个步骤,第一步是告诉TensorFlow按顺序将三层串在一起,第一层是这25个单元,带有Relu激活功能,第二个15个常规激活功能单元,第三层现在有10个输出单元,将告诉Tensorflow使用softmax激活函数,Tensorflow调用稀疏范畴交叉熵函数,对于Logistic回归,有二元交叉熵函数,这里我们使用稀疏范畴交叉熵函数,稀疏范畴指的是把y分类,它的值从1到10,稀疏指的是y只能取这十个值中的一个,所以每个图像要么是零,要么是1,要么是2,最多到9,你不会看到照片的,同样是数字2和数字7,稀疏指的是每个数字只是这些类别中的一个,这就是为什么在上篇文章中看到的损失函数叫做Tensorflow,稀疏范畴交叉熵损失函数,然后训练模型的代码和以前一样,如果你用这个代码,你可以在多类分类问题上训练神经网络。实际上不需要这些代码,因为在张量流中,有一个更好的代码版本使tensorflow工作的更好。