mnist手写识别数据集地址:https://pan.baidu.com/s/1Z8xWdPlSZwkOE-Gwy2e0LA 提取码:by4g
里面有一个mnist.pkl的文件,pkl是一个很多的序列组成的文件(也就是一个序列化的东西),它已经把手写识别的图片(28*28)的转化成了一个向量(1,784),然后给出了这个图片的标识0-9。
首先要打开pkl文件,需要用到py包cPickle,这里的open要用rb,因为是要以二进制的方式读取文件
import cPickle
import numpy as np
f = open('I:\wangpengfei-D\DeepLearning_Library\\neural-networks-and-deep-learning-master\data\mnist.pkl', 'rb')
info = cPickle.load(f)
可以通过下面的代码看看这个数据是什么样子的
print info
print type(info)
print len(info)
print (np.shape(info))
可以看出读取的pkl文件的内容info是一个元组,而且是一个长度为3的元组,元组的第一个元素表示50000个训练集,元组的第二个元素表示10000个验证集,元组的第三个元素表示10000个测试集。
print info[0][0] # 输出训练集的样本部分
print info[0][1] # 输出训练集的真是结果部分
print ("training_data:", np.shape(info[0][0])) #训练集样本的形状
print ("training_result_data:", np.shape(info[0][1])) #训练集真是记过的形状
可以看出训练集中每一个样本是一个行向量,当我们将其放入neural network的时候将其要转化为列向量。那么结果向量是一个列向量表示每一个样本的结果,也就是每一个图片的真实代表的数字是多少。
下面的代码用来显示验证集的形状
print info[1][0]
print info[1][1]
print ("validation_data:", np.shape(info[1][0]))
print ("validation_result_data:", np.shape(info[1][1]))
表示验证集中有10000个样本,每一个样本的数据是一个行向量,然后10000个验证样本的真实结果是一个维度为10000的列向量。
下面的代码用来显示测试集的形状
print info[2][0]
print info[2][1]
print ("test_data:", np.shape(info[2][0]))
print ("test_result_data:", np.shape(info[2][1]))
表示测试集中有10000个样本,每一个样本的数据是一个行向量,然后10000个测试样本的真实结果是一个维度为10000的列向量。