tensorflow利用emnist数据集进行手写字母识别

 EMNIST 数据集是一个包含手写字母,数字的数据集,它具有和MNIST相同的数据格式。The EMNIST Dataset | NIST

  1. 引用模块介绍:

import tensorflow as tf

import mnist

from tensorflow.keras import datasets, layers, models

import numpy as np

import matplotlib.pyplot as plt

import gzip,os

其中要注意的是,tensorflow和keras和numpy的版本一定要对应,如果不对应就无法正常引用,python版本也不能太新,3.6到3.7最佳,如果python版本不满足,可以安装anaconda,在anconda prompt中创建虚拟环境,让其中的python=3.6.5即可

Tensorflow=2.3.1  numpy=1.19.5  keras=2.4.3  这是一种可行的库的版本

2.1首先导入数据集和可视化

路径最好继续用相对路径 

tensorflow利用emnist数据集进行手写字母识别_第1张图片

 

显示训练集的第6张图片

tensorflow利用emnist数据集进行手写字母识别_第2张图片

 

 

2.2 神经网络模型

首先查看训练集和测试集的大小,为后面的步骤做准备

tensorflow利用emnist数据集进行手写字母识别_第3张图片

 

训练集的大小是124800,测试集的大小是20800

tensorflow利用emnist数据集进行手写字母识别_第4张图片  

这里需要注意的是,如何确定神经网络的隐含层数以及每层的神经元数目

这里附上一个在stackoverflow上看到的经验公式:

tensorflow利用emnist数据集进行手写字母识别_第5张图片  

经过计算,神经元的数目最好不要超过157,大致在75左右为佳,但是经过多次实验,发现在92个神经元的时候效果比较好

激活函数使用relu,效果比较好

输出层要设置27个输出节点,原因是标签到达26,而如果设置26个节点,接受的标签范围是[0,26),不包括26.

迭代次数设置20次即可,不必过多

tensorflow利用emnist数据集进行手写字母识别_第6张图片  

 

其中,x_train和x_test除以255是为了归一化,降低计算量

最终的结果如下:

tensorflow利用emnist数据集进行手写字母识别_第7张图片

最终测试的预测准确率在89.09%

2.3 卷积神经网络

tensorflow利用emnist数据集进行手写字母识别_第8张图片

 

其中,可以将全连接的神经元适当增加,从而增强准确率

tensorflow利用emnist数据集进行手写字母识别_第9张图片

 

在测试集中,预测的准确率在91.65%,相比于普通的神经网络,卷积神经网络的准确率更高一些,但是在算法上也更加复杂

遇到的最大的问题就是环境的配置问题了,之前对于tensorflow和keras的关系不了解,导致我安装的版本都是最新的版本,版本不对应,无法使用。一直会出现报错:版本不对(特别是tensorflow)但是报错并不会直接告诉你是版本的问题,在多个技术网站上搜索了好久,删除又创建了虚拟环境好多次,终于将需要的库安装完毕,并且可以正常使用。

 

 

你可能感兴趣的:(tensorflow,python,深度学习)