写在前面

之前已经完成了MNIST数据的获取,机器学习的数据预处理中包括数据清理(离散缺失值等处理),数据合成(将多个数据集合成单个数据集等处理),数据归约(降维等操作),数据变换(归一化等操作),MNIST数据集已经将数据清理,数据合成做好了,因此我们还需要做的就是数据归约和数据变换了,今天这篇文章主要进行数据降维的分析以及神经网络的建立

MNIST图片

首先我们来看一下MNIST数据集里的图片:

可以看到图片的灰度图如上,那么我再打印一下图片矩阵数据:

可以看到图像矩阵里面的数值都是0~255的,看一下程序中图片矩阵的存储类型:

从输出中我们可以看出来图片矩阵都是numpy的二维数组

前馈神经网络确立

我的想法是将图片的行向量和列向量做为神经网络的输入,设置输出层为单神经元,并且设置双隐层的前馈神经网络,图示如下:

我的输入层是2个神经元,分别是图片的行向量和列向量,接下来我介绍数据的降维方法

数据降维

行向量的获取方法就是直接将图像每行拼在一起,列向量的获取方法就是先将图片矩阵进行转置,再将转置之后的矩阵的每行拼在一起就是列向量了。

我们来实际编程测试一下刚刚的方法是否有效,先放程序:

if __name__ == '__main__':
    # print()
    arr = np.arange(20).reshape(4, 5)
    print(arr)
    img_temp_row = arr.flatten()  # Convert to a one-dimensional vector
    img_temp_line = (arr.T).flatten()
    print(img_temp_row)
    print(img_temp_line)

其中arr是我们虚构的数组,arr.T是转置之后的数组,arr.flatten()是将二维数组按行连接成一维数组,我先虚构了一个4行5列的数组,然后按照我上面讲的方法获取行向量和列向量,结果如下所示:

可以看到准确获取到了数组矩阵的行向量和列向量,因此这个办法可以用于MNIST数据降维处理