向毕业妥协系列之机器学习笔记:神经网络(四)Tensorflow实现(中)多分类问题
可以看到左侧的算法当y代入0或1的时候,会发现其实和右边的loss定义是一个道理(注意看吴老师的蓝色和红色的批注),所以Softmax回归其实是逻辑回归的泛化。先来一个jupyter notebook的例子,可以看到在数学上的两个结果相同的表达式在计算机中却输出不一样,下面的方法就可以提高运算的精度。上面是一个新的问题,比如一个自动驾驶系统,可能要在一张图片里识别出有无汽车,公共汽车,行人,那么此
目录
一.多分类问题
之前我们说的手写体识别是区分0和1,但是如果我们要识别什么银行卡号或者邮编什么的,这就有10个不同的数字了(0~9);又比如对肿瘤片子分类的话,分类结果可能有好几种等等情况。诸如此类都是多分类问题。即y可以取两个以上的值。
下面是二类和多类的一个示意图:
二.Softmax
左上角是咱们之前学过的二分类问题,而右侧是我们举得一个有四种分类可能的例子,并且给出了各种可能的类的概率计算公式(普适性公式请看上图左下角)
上图左侧是逻辑回归的损失函数的算法,右侧是Softmax回归的损失函数的算法。知道loss函数怎么算之后成本函数也就得到了。
可以看到左侧的算法当y代入0或1的时候,会发现其实和右边的loss定义是一个道理(注意看吴老师的蓝色和红色的批注),所以Softmax回归其实是逻辑回归的泛化。
三.神经网络的Softmax输出
之前讲过的二分类手写体数字识别是输出0或1,那么输出层只有一个神经元(unit)即可,但是现在我们要进行多分类问题(也即识别0~9),所以输出层要有10个神经元。
原来的:
现在:
上面的神经网络的代码实现:
但是吴老师说实现此神经网络,不要使用上面的代码,后面会讲解tensorflow中更高效的代码。
四.Softmax的改进实现
先来一个jupyter notebook的例子,可以看到在数学上的两个结果相同的表达式在计算机中却输出不一样,下面的方法就可以提高运算的精度。
看上图的意思是很明显能知道是让我们两个式子合为一个式子,在代码当中就是做如上修改。
参照上面的方式对Softmax进行如下改进:
之所以是linear是因为下面设定为True之后。softmax不再单独计算。
输出层只会输出Z的值。那么你测试集代入后也会输出Z的值。还要经过sigmoid。这样算出来的才是区间在[0, 1]的概率。
手写体识别的改进:
逻辑回归的改进:
五.多标签分类
上面是一个新的问题,比如一个自动驾驶系统,可能要在一张图片里识别出有无汽车,公共汽车,行人,那么此时的y就是一个有三个分量的向量。
那么我们如何实现这一功能呢?
一种方法是将这个问题分解成三个独立的机器学习问题,即建立三个独立的神经网络,依次将输出传入下一个神经网络,但这是一种笨的方法,其实我们可以在一个神经网络里做多标签分类,此问题中即多个二分类,因为我们需要知道是否有汽车,是否有公共汽车,是否有行人,即三个二分类问题,所以我们可以在输出层设置三个神经元,然后每个神经元都设置sigmoid激活函数(做二分类用),如下图:
通过上面的例子让我们了解到多分类问题和多标签分类不是一个问题。
更多推荐
所有评论(0)