写在前面
之前已经完成了MNIST数据的获取,机器学习的数据预处理中包括数据清理(离散缺失值等处理),数据合成(将多个数据集合成单个数据集等处理),数据归约(降维等操作),数据变换(归一化等操作),MNIST数据集已经将数据清理,数据合成做好了,因此我们还需要做的就是数据归约和数据变换了,今天这篇文章主要进行数据降维的分析以及神经网络的建立。
MNIST图片
首先我们来看一下MNIST数据集里的图片:
可以看到图片的灰度图如上,那么我再打印一下图片矩阵数据:
可以看到图像矩阵里面的数值都是0~255的,看一下程序中图片矩阵的存储类型:
从输出中我们可以看出来图片矩阵都是numpy的二维数组。
前馈神经网络确立
我的想法是将图片的行向量和列向量做为神经网络的输入,设置输出层为单神经元,并且设置双隐层的前馈神经网络,图示如下:
我的输入层是2个神经元,分别是图片的行向量和列向量,接下来我介绍数据的降维方法。
数据降维
行向量的获取方法就是直接将图像每行拼在一起,列向量的获取方法就是先将图片矩阵进行转置,再将转置之后的矩阵的每行拼在一起就是列向量了。
我们来实际编程测试一下刚刚的方法是否有效,先放程序:
if __name__ == '__main__':
arr = np.arange(20).reshape(4, 5)
print(arr)
img_temp_row = arr.flatten()
img_temp_line = (arr.T).flatten()
print(img_temp_row)
print(img_temp_line)
其中arr 是我们虚构的数组,arr.T 是转置之后的数组,我先虚构了一个4行5列的数组,然后按照我上面讲的方法获取行向量和列向量,结果如下所示:
可以看到准确获取到了数组矩阵的行向量和列向量,因此这个办法可以用于MNIST数据降维处理。
|