Python神经网络代码识别手写字的实现流程(一):加载mnist数据
2017-11-03 11:28
911 查看
任何的神经网络代码,加载数据都是第一步.加载数据的流程其实就是给神将网络的输入层输入数据的流程.
(1)首先介绍python中的gzip模块:gzip模块就是将压缩的数据解压,然后返回一个文件对象.
介绍python3中的pickle模块(该模块在python2中为cPickle).pickle模块的主要功能是将对象以文件的形式存在磁盘上,这句话看似拗口,但是理解了例子以后可以慢慢的理解.
函数:pickle.dump(obj, file, [,protocol])
将对象obj存到文件file中.
函数:pickle.load(file)
从file中读取一个字符串,并将它重构为原来的python对象。
(2)神经网络中我们使用的数据集为mnist.pkl.gz,是一个压缩文件.因此使用数据集时我们需要将该数据集解压,取出数据集中的数据.
上面为判断数据集是否存在,如果存在就打开该数据集,返回文件对象.
上面代码是加载文件对象,返回三个数据集.这三个数据集的形式如下:
也就是说返回的三个数据集为三个元组,其中的训练集training_data为50000*784和50000*1的数据构成.我们知道,识别手写字的神经网络代码的输入单元为784个,如果想要向量话处理数据集的话,我们输入的矩阵应该是784*50000形式.那么需要将输入的数据进行改造:
上述代码中,遍历训练集中的每一行,将其重新改造为784*1的列矩阵,这样的training_data就是一个数组,数组的每个元素为一个784*1的列矩阵.
训练集元组的第二个元素为50000*1的列矩阵.因为输层的单元为10,10个输出单元代表的为:判断出的为第几个就把第几个单元置为1,其余的单元则为0.因此对于这个50000*1的列矩阵也需要将其改造,改造为10*50000的矩阵.
最后,还需要将训练集再次组合到一起:
以上方法形成的数据集就可以用来训练数据.
(1)首先介绍python中的gzip模块:gzip模块就是将压缩的数据解压,然后返回一个文件对象.
介绍python3中的pickle模块(该模块在python2中为cPickle).pickle模块的主要功能是将对象以文件的形式存在磁盘上,这句话看似拗口,但是理解了例子以后可以慢慢的理解.
函数:pickle.dump(obj, file, [,protocol])
将对象obj存到文件file中.
函数:pickle.load(file)
从file中读取一个字符串,并将它重构为原来的python对象。
(2)神经网络中我们使用的数据集为mnist.pkl.gz,是一个压缩文件.因此使用数据集时我们需要将该数据集解压,取出数据集中的数据.
if os.path.exists('/ysk/code/python/neural-networks-and-deep-learning/data/mnist.pkl.gz') f = gzip.open('/ysk/code/python/neural-networks-and-deep-learning/data/mnist.pkl.gz', 'rb') else: print("file not exits!")
上面为判断数据集是否存在,如果存在就打开该数据集,返回文件对象.
training_data, validation_data, test_data = pickle.load(f, encoding = "iso-8859-1")
上面代码是加载文件对象,返回三个数据集.这三个数据集的形式如下:
也就是说返回的三个数据集为三个元组,其中的训练集training_data为50000*784和50000*1的数据构成.我们知道,识别手写字的神经网络代码的输入单元为784个,如果想要向量话处理数据集的话,我们输入的矩阵应该是784*50000形式.那么需要将输入的数据进行改造:
training_inputs = [np.reshape(x, (784, 1)) for x in trainging_data[0]]
上述代码中,遍历训练集中的每一行,将其重新改造为784*1的列矩阵,这样的training_data就是一个数组,数组的每个元素为一个784*1的列矩阵.
训练集元组的第二个元素为50000*1的列矩阵.因为输层的单元为10,10个输出单元代表的为:判断出的为第几个就把第几个单元置为1,其余的单元则为0.因此对于这个50000*1的列矩阵也需要将其改造,改造为10*50000的矩阵.
def vectorized_result(j): e = np.zeros((10, 1)) e[j] = 1.0 return e training_results = [vectorized_result(y) for y in training_data[1]]
最后,还需要将训练集再次组合到一起:
training_data = zip(training_inputs, training_results)
以上方法形成的数据集就可以用来训练数据.
相关文章推荐
- 神经网络学习(七)MNIST手写字识别 --- Python实现
- Python神经网络代码识别手写字具体流程(二):矩阵的前向传播
- 《神经网络与深度学习》第一章 使用神经网络来识别手写数字(三)- 用Python代码实现
- Python实现深度学习之-神经网络识别手写数字(更新中,更新日期:2017-07-12)
- 用python的numpy实现神经网络 实现 手写数字识别
- Python代码实现简单的MNIST手写数字识别(适合初学者看)
- keras:1)初体验-MLP神经网络实现MNIST手写识别
- Python神经网络代码实现流程(三):反向传播与梯度下降
- tensorflow 学习笔记12 循环神经网络RNN LSTM结构实现MNIST手写识别
- python神经网络案例——FC全连接神经网络实现mnist手写体识别
- 利用tensorflow一步一步实现基于MNIST 数据集进行手写数字识别的神经网络,逻辑回归
- 神经网络学习(六)MNIST手写字识别 --- Matlab实现
- 手把手入门神经网络系列(2)_74行代码实现手写数字识别
- python Tensorflow三层全连接神经网络实现手写数字识别
- 手把手入门神经网络系列(2)_74行代码实现手写数字识别
- 神经网络与深度学习 1.6 使用Python实现基于梯度下降算法的神经网络和MNIST数据集的手写数字分类程序
- 神经网络代码识别手写字(python3.4.3版本)
- 手把手入门神经网络系列(2)_74行代码实现手写数字识别
- 手把手入门神经网络系列(2)_74行代码实现手写数字识别
- python在线神经网络实现手写字符识别系统