第一个python手写识别程序

我的第一个AI应用是参考实战:从0搭建完整 AI 开发环境写出第一个 AI 应用AI应用开发实战 - 从零开始配置环境两篇文章进行的实施,故以该文做出相应的补充。

遇到的问题

‘python’ 不是内部或外部变量

命令行执行python –version提示’python’ 不是内部或外部变量,在命令行中输入

1
set PATH="C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64";%PATH%

之后,再输入

1
python --version

输出版本为3.6.5
但是关闭命令行之后,再输入python –version时,依旧提示 ‘python’ 不是内部或外部变量
故在计算机→属性右键→高级系统设置→环境变量→选择PATH→点击新建→将C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64添加→确定,之后再运行python –version,显示正常。

saved_model.pb路径不对

单独参考第一篇文章进行配置时,发现没有samples-for-ai\export\saved_model.pb这个路径。
原因是没有启动examples\tensorflow\TensorflowExamples.sln这个解决方案,将MNIST项目设置为启动项目并运行,则会有samples-for-ai\export\saved_model.pb这个文件了。

命令行无响应

安装scipy-1.1.0mxnet_cu90-1.2.0时,命令行一直无响应,解决方案是到scipy-1.1.0mxnet-cu90 1.2.0下载指定的文件,然后通过pip3命令来执行安装,其余问题也可以通过类似命令来解决。

1
2
pip3 install D:\scipy-1.1.0-cp36-none-win_amd64.whl
pip3 install D:\mxnet_cu90-1.2.0-py2.py3-none-win_amd64.whl

通过下载的文件可以得知,文件较大,命令行无法及时完成下载,所以需要有一定的耐心等待

注意需要将C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\Scripts添加到PATH变量中。

cudnn版本不对

现在官网https://developer.nvidia.com/cudnn提供的cudnn版本是7.4.1,而微软示例代码中的cudnn版本是7.0.3,高版本的cudnn也会导致编译失败,需要找低版本的7.0.的cudnn替换到*C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin\cudnn64_7.dll

运行结果

解决了这部分问题之后,能正常展示winform界面,运行结果如下:
正确识别
错误识别
该部分涉及到训练模型是否足够多的问题,该文不做深入的研究。

总结

参考资料中提及的两篇文章都已经是做手写识别非常好的入门资料,该文仅仅是对这两篇文章做一个相应的补充,以作备忘。
另外我希望早日掌握以下技能

识别开心消消乐的游戏界面,然后通过能够确定执行的最佳下一步,达到这个目的,我觉得我对人工智能的了解和我的AI编程就进入了新的层次了。

#参考资料

第一个AI应用

我的第一个AI应用是参考实战:从0搭建完整 AI 开发环境写出第一个 AI 应用AI应用开发实战 - 从零开始配置环境两篇文章进行的实施,故以该文做出相应的补充。

遇到的问题

‘python’ 不是内部或外部变量

命令行执行python –version提示’python’ 不是内部或外部变量,在命令行中输入

1
set PATH="C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64";%PATH%

之后,再输入

1
python --version

输出版本为3.6.5
但是关闭命令行之后,再输入python –version时,依旧提示 ‘python’ 不是内部或外部变量
故在计算机→属性右键→高级系统设置→环境变量→选择PATH→点击新建→将C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64添加→确定,之后再运行python –version,显示正常。

saved_model.pb路径不对

单独参考第一篇文章进行配置时,发现没有samples-for-ai\export\saved_model.pb这个路径。
原因是没有启动examples\tensorflow\TensorflowExamples.sln这个解决方案,将MNIST项目设置为启动项目并运行,则会有samples-for-ai\export\saved_model.pb这个文件了。

命令行无响应

安装scipy-1.1.0mxnet_cu90-1.2.0时,命令行一直无响应,解决方案是到scipy-1.1.0mxnet-cu90 1.2.0下载指定的文件,然后通过pip3命令来执行安装,其余问题也可以通过类似命令来解决。

1
2
pip3 install D:\scipy-1.1.0-cp36-none-win_amd64.whl
pip3 install D:\mxnet_cu90-1.2.0-py2.py3-none-win_amd64.whl

通过下载的文件可以得知,文件较大,命令行无法及时完成下载,所以需要有一定的耐心等待

注意需要将C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\Scripts添加到PATH变量中。

cudnn版本不对

现在官网https://developer.nvidia.com/cudnn提供的cudnn版本是7.4.1,而微软示例代码中的cudnn版本是7.0.3,高版本的cudnn也会导致编译失败,需要找低版本的7.0.的cudnn替换到*C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin\cudnn64_7.dll

运行结果

解决了这部分问题之后,能正常展示winform界面,运行结果如下:
正确识别
错误识别
该部分涉及到训练模型是否足够多的问题,该文不做深入的研究。

总结

参考资料中提及的两篇文章都已经是做手写识别非常好的入门资料,该文仅仅是对这两篇文章做一个相应的补充,以作备忘。
另外我希望早日掌握以下技能

识别开心消消乐的游戏界面,然后通过能够确定执行的最佳下一步,达到这个目的,我觉得我对人工智能的了解和我的AI编程就进入了新的层次了。

#参考资料

如无必要,勿增实体

初次接触到 如无必要,勿增实体 是在《西部世界》这部美剧中,今日早晨我在看贝叶斯定理的相关文章的时候,恰巧又温习到这句话,想聊一下该语句是怎么影响我的生活的。

以往

参加新的工作以后,很多东西都发生了变化。比如以前是B/S项目,现在是C/S项目。因为B/S的逻辑代码都存在于服务器端,基本上不用考虑源码被不良居心的人使用。而C/S架构存在源码泄露的风险,故需要对产品的Dll做混淆处理。
如果要制作一个安装包,避免不了以下这些步骤:

  • SVN签出最新代码
  • 重新生成解决方案
  • Release目录内的dll拷贝到混淆工具指定路径
  • 混淆结果拷贝到安装包制作路径
  • 生成安装包发布到指定路径

在window下的tortoisesvn 可视化操作下,选中指定目录签出文件,并不麻烦。
在visual studio 2017下,打开几十个项目重新编译通过就有点麻烦,毕竟项目越多,Visual Studio加载越慢。
在多个Release目录中,选中指定的待混淆文件拷贝对混淆工具的指定路径是重复低效事件。
再将混淆结果拷贝到安装包制作路径再制作安装包是重复低效事件。
再将安装包拷贝到阿里云的Ftp服务器是重复低效事件。

1
原目录和目标目录的不断切换,不同工具的开启和调用,整个过程操作下来,顺利则30分钟,不顺利则一个小时。

如果一天做两个不同版本的安装包,一天就一个多小时重复在安装包的制作之上。这并不能体现出我的工作价值。
鲁迅先生说过:

1
无端地空耗别人的时间,其实无异于谋财害命。

若不想被谋财害命,需要作出一些改变。

反思

若是一年做一次安装包,写一个安装包部署手册就好了。一年之后再制作安装包的时候,参考该部署手册就能很好的解决问题了。
但是一周2~3次的安装包制作(不做解释^_^),一周就有三四个小时用于制作安装包了。
《西部世界》好歹是一个机器人的世界,我公司又是做的RPA的产品,怎么自己还在做这种重复低效无意义的事情?

  • SVN可以通过命令行做签入签出的动作。
  • Visual Studio 2017 也可以通过命令行执行重新生成解决方案的动作。
  • 拷贝文件到指定目录的代码网上比比皆是。
  • ftp也可以通过命令行执行上传下载文件的动作。

我能不能制作一个工具,一键就把以上所有实现都给完成了?

现在

参考了一些资料,花了几天终于折腾出来了一个发布工具(Ftp命令行这部分未实现),虽说这个发布并比不上docker的一件部署。
但是于我个人而言,却是近期以来

1
如无必要,勿增实体

的最佳实践,基于此工具,制作一个安装包的时间已经省到一半的时间了,这样也是惜时如金的一种表现吧。
这个基于Hexo主题的网站搭建也是一个Do not repeat yourself的实践,没有试图再去从零开始搭建一个网站框架,创作一个新型的电子垃圾也是迷途知返吧;
再引用一句鲁迅的名言

1
2
3
4
总之,我们要拿来。我们要或使用,或存放,或毁灭。  
那么,主人是新主人,宅子也就会成为新宅子。
然而首先要这人沉着,勇猛,有辨别,不自私。
没有拿来的,人不能自成为新人,没有拿来的,文艺不能自成为新文艺。

没有拿来的,技术不能自成为新技术。不需要创造重复的轮子,但是手上也需要有适合自己的工具。

总结

奥卡姆剃刀原理也好,Dry原则也好,RPA也好,AI也好,甚至西部世界也好都说明了一个道理:
人从事重复简单的工作,能带来的是熟练程度的提升,但是在更年轻力壮的人或者机器人面前,他并不具备足够的竞争力。

参考资料

这个男人来自地球——观后感

被人推荐了这个电影,看介绍时发现该这电影已经上映很久了。该电影是跟朋友独处一室时在网上找的资源看的,结果朋友看了该电影有点昏昏欲睡,说这电影这么垃圾,你也推荐给我看,还不如看《金刚狼2》。

电影——萝卜白菜,各有所爱

我看了一些低成本的电影,比如说《九死》,《这个男人来自地球》等,都基本上是一个房间内的故事。后者比前者的成本低许多,但是后者所要表达的思想要比前者深刻得多。

当你朋友说他是山顶洞人,活了14000年,家里的画是梵高亲手送给他的,他曾和哥伦布一起远航,听释迦牟尼宣扬佛教,然后他创建了基督教,因为每过十年别人发现他容颜从未老去,所以他才选择逃离现在居住的地方换个地方生活,你信不信?

该影片是一个悬疑电影,生物学家,历史学家,心理学家都试图证明主角john在说谎,我也在一步一步的思考男主是否在撒谎。但是等到大家都觉得john说的话无懈可击的时候,他才告诉朋友们这仅仅是我跟你们开的一个玩笑。最后的结局证明了john没有撒谎,但是该结局已经不重要了。

我个人觉得电影是否是佳作就是是否会引人思考生活的意义。

你在跟她人交流的时候是否会顾忌他人的感受?伊迪丝是虔诚的基督教教徒,然后约翰说我就是上帝。然后伊迪丝拳头紧握,就像是要扑上去揍他一样。
当威利掏出手枪要结束约翰的生命的时候,大家都认为他疯狂。但是大家并不知道他刚经历了亡妻之痛。常言道,说者无意,听者有心,我刚经历丧妻之痛,你却说你长生不老,自然会内心不平衡。

假如给你长生不老的机会,而且给你一个不老容颜,然后每10年就搬一次家,你会怎么样面对这件事情?

假如你朋友说出荒诞离奇的事情,甚至完全超出你的认知,比如他是穿越回来的说50年后的世界已经实现了星际穿越或者意念编程,你会不会相信?

假如你付出的努力都一直得不到肯定,一直被误解,你是否会想尽一切办法去证明自己?

假如说度日如年,那么你怎么度过你剩下的1万年,2万年?

地球上不会存在太多活了14000年的动植物。但是能活14000多天(38岁左右)的人类却多的去了。每个人在生活中也会遇到属于他(她)的艺术家梵高,冒险家哥伦布,导航者释迦牟尼。男主历经时代变迁,最终却一直是孤独一人。由于人的相似性,人找到可以陪伴自己一生的伴侣的成功率高了很多。

幼儿园,小学,初中,高中,大学,社会等各种不同的场合,聚散无常。初识时回眸一笑,毕业时车站送别,从此再也没见过面了。每个人都会有自己新的旅程了,短信,邮件,电话等等都是可以联系的方式,有了各自的生活之后,然后联系就渐渐地少了。

14000年能做什么?无人汽车,无人飞机,3D投影编程等等早就是见怪不怪的东西;癌症,艾滋病等等都是早已经解决的问题。换心脏就跟换内存条一样简单。结合最近几个世纪来看,在14000年的时间里,科技可以取得好几个质变的发展,甚至可以通过拷贝复制的方式来学习新的知识。

估计14000年之后,不变的就是感情的产生机制了,还是会像长出了牙齿,树枝发芽,头发变白那样处于不经意间发生了。

且不谈14000年之后你会怎么样?14000天之后你会怎么样呢?

野蛮何以成为文明的幌子

一提日本仇似海,从此智商是路人——这用来描述打砸抢日本车的激进人士很贴切。

游行示威,上街表达个人情感,我各种支持。但是倘若借爱国之名,行抢劫打砸之实就是强烈反对了。
有人说:打砸同胞已购买车辆是爱国。竟以电影《赛德克巴莱》里面的台词:“如果文明是叫我们卑躬屈膝,那我就带你们骄傲地野蛮到底”作为借口。我真不敢认同中国的文明是通过这种“野蛮”得到延续的。大刀向鬼子们的头上砍去,刀口何以指向了国内同胞的脖颈?当初人民选择买国产车还是日本车还是德国车是他们自己的权利。你若仇恨日本,自强身健体,工作兢兢业业,努力民强国富。何以借这“爱国主义”的名义来做伤害同胞感情的事情。
你可以将拳头挥向小偷,强盗,强奸犯等等,制止他们的作恶行为。何以自己到成为了强盗?做着伤害同胞的事情,并称之为延续文明的方式,这与鬼子的打砸抢烧又有分别?
简单讲讲我对中日,中菲,中美关系的看法:
首先,中日开战的底线是什么?自卫队登岛就是触碰了战争的底线,若自卫队登岛,政府还不有所作为,那就真到了怀疑执政党的执政能力的时候了。现在假借爱国主义进行所谓的打砸抢烧,受伤害的只是自己的同胞,并给日本人的生活平添了一些笑料。真的是一提日本仇似海,从此智商是路人,谁脑残去打杂日货,我就跟谁绝交!
其次,菲律宾对中国黄岩岛有觊觎之心,中国通过经济战,控制菲律宾香蕉的进口,从而使阿基诺三世的民意支持率下降,这是中方的不战而屈人之兵。日本对中国钓鱼岛有觊觎之心,中国民间激进人士却通过打砸抢烧伤害同胞的感情,怎么好意思说这就是爱国。孙子兵法说不战而屈人之兵是上上策,现在国家努力发展经济不强行占领岛屿,倒先民间自己损害自己的同胞的财产,自乱阵脚了。
最后,日本和菲律宾一样只是美国的一个棋子。中国可以不买菲律宾的香蕉从而使菲律宾的几十万蕉农失去生计;中国亦可以通过发展国家民族产业从而摆脱对日本产品的依赖性,通过经济上的独立从而摆脱对日本产品的依赖性。
但是中国倘若面对最终大boss——美国,也打砸抢烧么?
你怎么忍心打砸抢烧同胞们通过卖肾而来的ipad,iphone?
抵制美货的话,微软、可口可乐、高盛、强生等等自然不是是躲不过“爱国主义者”的洗劫。但是你倘若真的反美,怎么打这场战争?先不说你是否看日本的火影,海贼王,是否听过天空之城,风之谷类的。你真的很难说你没有接受过美国的文化“入侵”,大学英语必过四级,《变形金刚》《黑衣人》《阿凡达》《2012》等等。你若反美,自要抵制microsoft office,c++,java等等,开发一套属于自己的操作系统,自己的办公软件和自己的编程语言,从而摆脱对美国的依赖性。战争的形式自然不止一种,经济战,有赢就有输,像菲律宾自然是输得五体投地。但是一个国家不可能动不动都跟别的国家都贸易战,鹬蚌相争渔翁得利,这和闭关锁国又有什么分别?
对于那些听风就是雨喊怎么还不打,骂政府腐败无能的人,自然不想深究你在生活中是个什么样的人,你是否在自己的工作岗位上贡献你自己的一份力量。你是否尊重了哪些负重30多公斤30多公里进行拉练的士兵。你若身体符合军人标准,你是否有弃笔从戎,远赴边疆抛头颅,洒热血之心?
我也是吃着地沟油的命,操着中南海的心。但是还是希望大家理性爱国,不要让我为你的智商着急。对同胞野蛮绝对不是延续文明的理由,那只是表明自己是个野蛮人罢了。