跳转至

第12章 多入多出的三层神经网络 - 深度非线性多分类⚓︎

12.0 多变量非线性多分类⚓︎

12.0.1 提出问题⚓︎

手写识别是人工智能的重要课题之一。MNIST数字手写体识别图片集,大家一定不陌生,下面就是一些样本。

图12-1 MNIST数据集样本示例

由于这是从欧美国家和地区收集的数据,从图中可以看出有几点和中国人的手写习惯不一样:

  • 数字2,下面多一个圈
  • 数字4,很多横线不出头
  • 数字6,上面是直的
  • 数字7,中间有个横杠

不过这些细节不影响咱们学习课程,正好还可以验证一下中国人的手写习惯是否能够被正确识别。

由于不是让我们识别26个英文字母或者3500多个常用汉字,所以问题还算是比较简单,不需要图像处理知识,也暂时不需要卷积神经网络的参与。咱们可以试试用一个三层的神经网络解决此问题,把每个图片的像素都当作一个向量来看,而不是作为点阵。

图片数据归一化⚓︎

在第5章中,我们学习了数据归一化,是针对数据的特征值做的处理,也就是针对样本数据的列做的处理。

本章中,要处理的对象是图片,需要把整张图片看作一个样本,因此使用下面这段代码做数据归一化方法:

    def __NormalizeData(self, XRawData):
        X_NEW = np.zeros(XRawData.shape)
        x_max = np.max(XRawData)
        x_min = np.min(XRawData)
        X_NEW = (XRawData - x_min)/(x_max-x_min)
        return X_NEW

代码位置⚓︎

ch12, MnistDataReader.py