写在前面
上一篇笔记里面已经介绍了MNIST数据集使用Softmax回归进行处理的基本框架,这篇笔记会记录更多实践的过程。(适合python初学者)
因为Docker安装的tensorflow是最小包,所以教程上提到的文件没有找到有效的运行方法,就干脆抽取了项目核心部分的代码单独拿出来运行实验。
1. 文件准备
首先到MNIST官网上下载了四个gz数据文件,放入mnist_data文件夹中,然后找到tensorflow/python/platform/gfile.py放到需要运行的文件夹下面。(如果直接去git上下载了tensorflow-r.010是不能直接运行其中的文件的,因为里面的python路径冲突的缘故。)
2. 导入必要的模块
在文件一开始就导入tensorflow程序必要的一些模块和接下来解压文件需要的一些模块。
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import gzip
import os
import tempfile
import gfile
from six.moves import urllib
from six.moves import xrange
import tensorflow as tf
3. 数据导入
对这四个文件的解压和读取主要调用:
1) _read32(bytestream)用于读取二进制文件
def _read32 (bytestream) :
dt = numpy.dtype(numpy.uint32).newbyteorder('>' )
return numpy.frombuffer(bytestream.read(4 ), dtype=dt)[0 ]
2)extract_images解压图片文件
def extract_images (filename) :
"""Extract the images into a 4D uint8 numpy array [index, y, x, depth]."""
print('Extracting' , filename)
with gfile.Open(filename, 'rb' ) as f, gzip.GzipFile(fileobj=f) as bytestream:
magic = _read32(bytestream)
if magic != 2051 :
raise ValueError('Invalid magic number %d in MNIST image file: %s' %
(magic, filename))
num_images = _read32(bytestream)
rows = _read32(bytestream)
cols = _read32(bytestream)
buf = bytestream.read(rows * cols * num_images)
data = numpy.frombuffer(buf, dtype=numpy.uint8)
data = data.reshape(num_images, rows, cols, 1 )
return data
3)extract_labels解压标签文件