项目所用技术:
  TensorFlow 1.2.0 + Flask 0.12 + Gunicorn 19.6。

  类比的话TensorFlow 就是游戏里的背包,里面有各种有用的道具(api),Flask是游戏本身,只有在Flask项目里面用TensorFlow才有用, Gunicorn是对于大型项目是游戏平台,对于我们这个小项目就是游戏启动器,只有用 Gunicorn才能把Flask启动起来。

  大体思路是:在页面通过 Canvas 画一个数字,然后传给TensorFlow识别,分别给出Softmax回归模型、多层卷积网络的识别结果。使用鼠标在画布上自由编写一行,请将其作为输入(根据所使用的模型调整为28x28)发送到服务器,并返回判断为MNIST返回的每个模型的判断显示结果。结果大致为使用简单Softmax逻辑回归的单层,分类率约91.2%;多层卷积神经网络,分类率约99.2%。但是基于这种实现是无法实现多个手写数字识别的,原因在于使用Canvas,提交数据的一瞬间是你鼠标离开画布的一瞬间,也即使用Canvas只能画一笔。故所有的多个数字识别都是上传图片进行OCR处理,或者通过opencv连接摄像头进行识别。但在本实验中,为了更好的体现人机交互,进行算法演示和改进,选用Canvas进行单个数字识别。

TensorFlow

Tensorflow涉及到模型的建立、训练、应用等步骤。首先我们需要了解整个算法的思想,然后多亏Tensorflow的各种打包好的算法,让我们可以使用一行语句完成各种复杂的运算。比如卷积运算、梯度下降算法、回归函数等,真太NB了。

我们只要按要求调用建立几层卷积层、池化层、全连接层即可。代码如下:

Flask

作为系统前端,一般会使用Bootstarp写整个页面,涉及到具体的控件,如上传按钮、进度条、画图,可以直接使用相关控件。而数据交互则涉及到Ajax函数进行前后台的json数据交互。这里给出cavans画图的输入,以及一个上传多个文件的前端模板,这个是基于代码重复率比较的项目修改的。

这里尤为提一下Flask的简便的这一特点。Django自带了后台管理,但是启动一个有交互的Django页面则较为复杂,而Flask只要在main.py里写完相关route()函数即可,巨简单。

Gunicorn

  本来想找找相关的资料,但是所有网上能找到的都对初学者很不友好。就死磕这个视频吧,大致都能看懂,你就可以去和老师扯了。项目解析

  总体而言该项目的特点有:1.算法上进行了Softmax回归模型、多层卷积网络两种算法的模拟,和结果显示。2.基于Flask框架实现了网页版的显示和交互。 3.部署在百度云CentOs 7.2的服务器上,项目运维的内容充足。以上三点足够完成一万字以上的毕业论文了。

  

  参考文档:
  相关链接
  什么是手写数字识别