本实操案例是对手写识别教学案例的实操步骤,旨在同学们可以直接根据本文档所写的实操步骤,完成手写识别案例中神经网络的执行、调参过程,最终使精确度达到很高的一个水平,以对神经网络有一个大致的了解。
本教学案例所有的文件都以放在gitee码云上,同学们请提前进行下载。下载地址如下:
[资料包]:https://gitee.com/ai-case-study-group/lesson-plan
找到克隆/下载按钮,点击按钮,弹出浮窗,然后点击浮窗最下面的下载zip进行下载。
下载完成后,你将得到一个压缩包,然后将其解压出来,得到 lesson-plan文件夹。点击文件夹,如下图所示:
再点击手写识别文件夹,得到以下文件目录:
这些就是本教学案例所需要的所有资料了。
打开手写识别文件夹中的安装包文件夹,双击python3.7.1可执行文件,进行安装。
弹出窗口
第一步,勾选第二个复选框 Add Python 3.7 to PATH,然后点击第二个选项进行自定义安装。
第二步,默认全选,直接点击next就行了
第三步,勾选第四个复选框,将python的执行路径添加到系统环境变量,然后选择python的安装目录。在这里我建议同学们把所有这些编译环境都单独放在非系统盘的一个文件夹中,方便后续的环境配置,也便于集中管理。最后点击install进行安装。
第四步,检查是否安装成功。同时按住win+R,在运行里面输入cmd,按回车执行。
然后出现终端控制台,输入python,出现python的版本信息,说明安装成功!
Jupyter Notebook是一个开源的Web应用程序,允许用户创建和共享包含代码、方程式、可视化和文本的文档。就是在浏览器上运行的python编译器。最大的优点是可以将代码按步骤(块)运行,这在神经网络的编写代码方面很是方便。
第一步,打开命令提示符,进入到python的安装文件夹下的Scripts文件夹中,你在这个文件夹中就可以看到pip.exe。
点击窗口栏中的地址栏,输入cmd,进入当前路径的命令提示符。
输入这行命令:python -m pip install --upgrade pip
,等待安装完成。
继续输入命令:pip install jupyter
,等待安装完成。
完成后script文件夹中会出现很多新的jutpter有关的文件。
继续输入以下指令,启动jupyter notebook
jupyter notebook
然后会跳转到浏览器,显示python安装目录中Script下的的文件目录。
注意:如果出现以下情况
请在用户目录C:\Users\(用户名).jupyter下找到jupyter配置文件jupyter_notebook_config.py,将该文件的c.NotebookApp.notebook_dir =“文件路径” 修改为本地存在的目录,修改之后,jupyter notebook将会从这个目录启动。
按下Ctrl+F,打开查找。输入c.NotebookApp.notebook_dir
去掉前面的#号,在单引号里输入启动路径
第一步,安装whl。whl是python中特有的安装包。进入Scripts路径的命令提示符中输入pip install wheel
。出现Successfully installed这表明安装成功。
第二步,安装numpy库。这时打开资料包里的安装包,把以下两个文件复制到Script文件夹中。
复制,粘贴。
然后,进入Scripts路径的命令提示符中输入pip install numpy-1.17.3-cp37-cp37m-win_amd64.whl
,就可以安装了。成功之后也会出现Successfully installed。
第三步,安装matplotlib库
进入Scripts路径的命令提示符中输入pip install matplotlib-3.1.1-cp37-cp37m-win_amd64.whl
,就可以安装了。成功之后也会出现Successfully installed。
第四步,安装tqdm库,进入Scripts路径的命令提示符中输入pip install tqdm
,就可以安装了。成功之后也会出现Successfully installed。
在python安装目录中创建一个新文件夹,命名为workspace。
然后将案例源码放入workspace文件夹中。
首先,按住win+R打开终端控制器。
输入jupyter notebook
,启动jupyter notebook。
进入python安装目录,打开workspace文件夹,进入源码文件夹,打开Handweriter recognition.ipynb
进入到代码编辑界面
此案例源码一共有43块代码,可由从上到下的顺序依次运行。
选中一块代码块,变成绿色后,点击上方的运行,就开始运行这块代码块了。运行时,代码块会处于*号状态。有些代码块的运行时间会比较久,请耐心等待,这些代码块都添加了进度条,不会让你枯燥等待。
当运行到第10块代码块开始,就可以看到数据集里的手写识别所用的图片了。
第10块是训练集中的图片。
第11块是验证集中的图片
第12块是测试集中的图片
当运行到第27块代码时,我们会得到识别图片中数字的精确度的初始值。可以看出都是在10%左右。相当于0-9十个数字中随机选一个,这时我们的精确度可以说是非常低的。
但是接下来的代码块将进行训练,训练10次。
训练结束后的精确度相比于之前有一个很大的提高。
之后,将得到的数据进行曲线化,这样有一个更加直观的感受。
这是10次训练中的误差值,可以看到一直在减小。
这是10次训练中的精确值,可以看到一直在增大。
这时训练10次的结果,继续运行下面的代码,我们试一试训练100次将会得到什么结果。
这时的训练集已经快达到100%的精确度了,再看看对应曲线表示。
这是误差值,已经快趋近于0了
这时精确度,已经快趋近于1了
这时,你可能会想,训练了10次就有从10%到97%的提升,训练100次为什么就达不到100%呢?先不要着急,我们继续向下运行,看看最后20次的曲线情况。
这是误差值,发现黑线再上下波动,红线缓缓下降,并且相差很大
这是精确度。也发现黑线再上下波动,红线缓缓下降,并且相差很大
这就说明出现了过拟合的现象。至于怎么解决这个问题,那么就很复杂了。本教学案例针对的入门阶段,解决方法就不继续讲解了。代码也就到此结束了。
本实操案例旨在让同学们快速上手,让同学们可以直接的看到神经网络的训练结果,以激发同学门对神经网络这一学科的兴趣。如同学们想深入理解代码原理,请看资料包中的手写识别教学案例,其中对代码进行了解释。
最后,希望同学们可以加入到神经网络的学习当中,跟我一起探索人工智能的奥秘。我们的征途是星辰大海!
这就说明出现了过拟合的现象。至于怎么解决这个问题,那么就很复杂了。本教学案例针对的入门阶段,解决方法就不继续讲解了。代码也就到此结束了。
本实操案例旨在让同学们快速上手,让同学们可以直接的看到神经网络的训练结果,以激发同学门对神经网络这一学科的兴趣。如同学们想深入理解代码原理,请看资料包中的手写识别教学案例,其中对代码进行了解释。
最后,希望同学们可以加入到神经网络的学习当中,跟我一起探索人工智能的奥秘。我们的征途是星辰大海!