基于tensorflow的MNIST入门

本文是作者作为小白学习OCR票据识别的初步尝试,从TensorFlow的安装配置开始,详细介绍了如何在PyCharm中导入TensorFlow。接着,通过MNIST数据集,展示了数据的可视化和读取,以及构建并优化了多层卷积网络模型,最终模型在未经优化的情况下达到99.2%的平均准确率。
摘要由CSDN通过智能技术生成

要做一个OCR票据识别,虽然有许多现成的接口,但是作为小白,打算先从MINIST入门,逐步深入,记录下一步步过程。

一、在pycharm中导入TensorFlow

1、Anaconda的下载与安装

下载链接:Anaconda下载

安装好以后在开始菜单栏选择Anaconda prompt,由于anaconda下载的是最新的版本,附带下载的python也是3.6,但是目前windows下TensorFlow只支持python3.5,所以要修改一下python的环境,在Anaconda prompt里运行

conda create -n tensorflow python=3.5

再次查看python版本,更换为3.5

2、TensorFlow及其相关包的安装

在Anaconda prompt中开启TensorFlow:

activate tensorflow

安装cpu版本:

pip install --upgrade --ignore-installed tensorflow  

安装ipython和Spyder:进入anaconda navigator中找到这两个包并下载


测试:在Anaconda prompt中开启TensorFlow,进入python,输入下面代码

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

3、在pycharm中导入TensorFlow

创建工程test,选择File->settings->Project:test->Project InterPreter,在一串路径后选择Add,然后再Base interpreter中选择TensorFlow的解释器,如下图


再在IDE中输入上面的测试代码,运行


以上部分参考文档:Windows下用Anaconda安装TensorFlow,并在pycharm中使用


二、MNIST数据集处理

1、可视化

mnist官方文档对数据集有介绍:mnist数据集

把它以字节流的存储方式转为图片模式,首先是一张图片的测试:

import numpy as np
import struct
import matplotlib.pyplot as plt

filename = 'train-images.idx3-ubyte'
binfile = open(filename, 'rb')
buf = binfile.read()

index = 0
magic, numImages, numRows, numColumns = struct.unpack_from('>IIII', buf, index)
index += struct.calcsize('>IIII')

im = struct.unpack_from('>784B', buf, index)
index += struct.calcsize('>784B')

im = np.array(im)
im = im.reshape(28, 28)

fig = plt.figure()
plotwindow = fig.add_subplot(111)
plt.imshow(im, cmap='gray')
plt.show()
运行之后可以看到784维的向量reshape成28*28的图片


以上参考文档:python读取mnist

现在要读取多个图片并保存,加上一层循环,目前先读取30张

import numpy as np
import struct
import matplotlib.pyplot as plt

#以二进制方式读取文件
filename = './Dataset/train-images.idx3-ubyte'
binfile = open(filename, 'rb')
buf = binfile.read()

index = 0
magic, numImages, numRows, numColumns = struct.unpack_from('>IIII', buf, index)
index += struct.calcsize('>IIII')
#'>IIII'是说使用大端法读取4个unsinged int32

for i in range(30):  # 读取前30张图片
    im = struct.unpack_from('>784B', buf, index)
    index += struct.calcsize('>784B')
    im = np.array(im)
    im = im.reshape(28, 28)
    fig = plt.figure()
    plotwindow = fig.add_subplot(111)
    plt.axis('off')
    plt.imshow(im, cmap='gray')
    plt.savefig("./Dataset/train-images/test" + str(i) + ".png")
    plt.close()
binfile.close()

在对应的文件夹下可以看到图片,如下所示


另一种读取图片的方式

import gzip
import numpy
import matplotlib.pyplot as plt
filepath = r"E:\python_Project\MNIST\Program\Dataset\train-images-idx3-ubyte.gz"
def _read32(bytestream):
    dt = numpy.dtype(numpy.uint32).newbyteorder('>')
    return numpy.frombuffer(bytestream.read(4), dtype=dt)[0]
def imagine_arr(filepath):
    with open(filepath, 'rb') as f:
        with gzip.GzipFile(fileobj=f) as bytestream:
            magic = _read32(bytestream)
            if magic != 2051:
                raise ValueError('Invalid magic number %d in MNIST image file: %s' % (magic, f.name))
            _read32(bytestream)  # 几张图片
            rows = _read32(bytestream)
            cols = _read32(bytestream)
            img_num = 64        #同时展示的图片数目
            buf = bytestream.read(rows * cols * img_num)
            data = numpy.frombuffer(buf, dtype=numpy.ubyte)
            return data.reshape(img_num, rows, cols, 1)
im_data = imagine_arr(filepath)
fig, axes = plt.subplots(8, 8)
for l, ax in enumerate(axes.flat):
    ax.imshow(im_data[l].reshape(28, 28), cmap='gray')
    ax.set_xticks([])
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值