无意间接触到利用卷积神经网络来进行手写体识别,觉得好玩便尝试一下
版本:python 3.8 Tensorflow 2.9
安装Tensorflow
首先我们需要安装Tensorflow,我这里是在anaconda中新建了一个虚拟环境,名叫tensorflow(另外说一句anaconda简直是太好用了!)
1 | conda create --name tensorflow python=3.8 |
安装完之后,默认在tensorflow虚拟环境里面,如果不在,在anaconda的shell中 输入activate tensorflow
进入tensorflow环境
现在,我们来安装tensorflow
1 | pip install tensorflow==2.9 -i https://pypi.doubanio.com/simple/ |
这里我是安装的2.9版本,大家可以自行选择。
然后安装 tensorflow 所需要的包
1 | pip install pandas matplotlib notebook -i https://pypi.doubanio.com/simple/ |
这里也是根据自己的选择来安装
MINIST数据集
我们都知道,要训练一个模型,需要数据集的支持,而tensorflow提供了MINIST数据集,分为数据集和测试集。
训练集: 有6万张图片,每张图片大小28x28,同时有对应数量的标签(就是每张图片对应的数字)
测试集: 与训练集相比,其他一样,就是图片只有1万张
我们可以看看测试集的大小与部分图片 (注意 这里必须安装matplotlib库)
1 | import tensorflow as tf |
差不多是下面这个样子
训练CNN卷积神经网络
以下是对代码所定义的神经网络模型的讲解(虽然不是我写的)
- 第一层为卷积层,32卷积核(即32输出通道),卷积核大小5x5,激活函数Relu,零值等大填充
- 第二层为池化层,2x2最大值池化
- 第三层为卷积层,卷积核大小5x5,64个输出通道
- 第四层为池化层,仍为2x2最大池化
- 第五层为扁平化层,将输入的二维张量拉成一维,便于输入给全连接层
- 第六层为全连接层,与书上不同,这里是64个神经元(因为我的电脑内存不大)
- 第七层为Dropout层,随机丢掉一些全连接层的神经元,以避免过拟合
- 第八层,即最后一层,为输出层,输出独热编码
1 | import tensorflow as tf |
现在来让我们看一下运行结果:
使用训练好的模型进行预测
使用MINIST数据集的测试集
1 | import tensorflow as tf |
运行结果
我们可以看到,全都预测对了
识手写数字识别
接下来让我们来试试自己写的数字能不能识别
这里我们用画图来画一个28*28的黑底白字的png图

这里我画了一个数字4,然后让我们带入代码中,看看能不能识别出来。
1 | import tensorflow as tf |
运行结果:
对了! 这说明我们训练的模型有用!