目录
在上一节我们了解了有关神经网络与逻辑回归的的例子,从而知道了神经网络的大致框架,今天我们举一个人脸识别的例子。
先了解下图片的构成
首先,我们给出一张图片作为输入:
假设这张照片的分辨率为1000x1000像素(也可以称作是1000x1000的矩阵),我们先了解这是什么意思:
将这张照片分为1000*1000个小正方体,每个小正方体由一个0-255之间的数字代表,代表这个格子的亮度
如果你希望得到这些像素的亮度值,并将它们展开成向量,最终得到一个列表或者向量(这将包含100,000个数据,因为1000*1000),所以现在的问题是你能否训练一个神经网络模型,使得其能够将百万像素值的特征向量作为输入,并输出图片之中人的身份。
大致步骤
那么,步骤应该很明显了,结合上一节所了解的神经网络构成,我们可以知道大致步骤:
第一步,将图片变为一个特征向量
第二步,将特征向量输入到你设计的隐藏层之中(当然,可以设计多层隐藏层,然后每层的激活值层层传递)
第三步,将你最终得到的激活值传入输出层,并且得到你要的值(例如她是某某某的概率)
用图形表示差不多是这样:
点点关注不迷路ヾ(≧▽≦*)o
其它的一些有趣的地方
有趣的事情是,如果你希望看看每个隐藏层的激活值,比如,第一个隐藏层,你大概率会看到这样子的:
这可以说明,第一个神经元正在寻找一些低垂直线之类的东东,第二个神经元在寻找类似定向线或者定向边缘之类的东东,第三个神经元在寻找一条线之类的东东。所以在神经元的最早层中,神经网络大都尝试在寻找一些非常短的线或者边缘。
如果你寻找下一个隐藏层,你大概率会发现上一步的那些线条组合到了一起,目的是寻找一些关于脸的部分:
而到下一个隐藏层的时候,神经元以及能够聚合出一些面部了(vokal好害怕,像伪人);
最后再通过获得的这些面部尝试判断人物身份。
神经网络的神奇之处在于,没有人告诉它第一步第二步第三步该做什么,但是它可以自己学习并且在每层的特征感知器自动组合。也可以看出,每一层的激活值图像覆盖范围是越来越大的,这也意味着每层的激活值实际上对应着图像中不同大小的区域。
点点关注不迷路ヾ(≧▽≦*)o
在不同数据集上的表现
让我们看看不同的数据集在这个神经网络上的表现如何:
例如汽车。你可以发现,神经网络仍然在第一步获取了一些线条,第二层组成了一些部分,第三层形成了一些汽车,详细的就不啰嗦了:
在下面的章节中,我们将了解如何亲手创建自己的神经网络啦!
点点关注不迷路ヾ(≧▽≦*)o