目录
欢迎回到我们的神经网络与深度学习Tensorflow实战学习,本篇为人工智能学习第三篇文章。前面的文章中我们学习安装了Tensorflow-GPU,在本文章开始我们将从理论课逐步进入编码的学习,了解人工智能为什么离不开python语言,再到人工智能的技术将为我们解决什么问题。
初识Python
Python的由来
Python是目前最受欢迎的程序设计语言之一,它结构清晰,简单易学,拥有丰富的标准库和第三方生态系统,非常适合作为机器学习、数据分析的编程语言。在这一章中,我们会简要的介绍python语言的历史和发展,由于篇幅的原因,对于基础知识学习可以从官网中学习,为后面的编程实践打下基础。
1989年底,据说是为了打发无聊的圣诞节,荷兰人Guido Van Rossu编写了python语言,Gudio是喜剧Monty Python的飞行马戏团的一位粉丝,因此这个程序设计语言就被取名为python,是蟒蛇的意思。
可以看到,python语言的logo就是两条缠绕在一起的蟒蛇,python是开源的语言。它由非营利组织python软件基金会拥有、管理,由社区驱动。Python的解释器源代码公开,属于自由软件,自有软件的英文名为free software,这个单词在英文中有自由、免费的双重含义,为此,自由软件运动的创始人理Richard Matthew Stallman给出了以下的定义,自由软件的重点在于自由权而非价格,这里的free应该是自由的话语权中的自由的意思,而不是免费的啤酒中的免费的意思,用户可以自由的运行、拷贝、分发、学习、修改和改进这些软件。
自由软件运动
Stallman是一位坚定的自由软件运动的倡导者,正是在他所倡导的GUN运动中出现了linux操作系统。GUN是一种递归的写法,也就是gnoes not unix。Stallman认为,使用专利软件是非常不道德的事情,只有附带了源代码的程序才是符合道德标准的,但是公开源代码之后,为了防止一些商业公司利用自由软件的基础,在上面进行一些修改后,再把它私有化。Stallman别出心裁,创造了copyleft的授权办法,可以看出来这个词是copyright相对应的,他要求所有的GNU程序要遵循copyleft的原则,也就是说,你可以拷贝、修改甚至出售都是没有问题的,但是有一条对原本的源代码进行的所有改进和修改,必须是向每个用户公开,所有用户都可以获得修改后的源代码。copyleft保证了自由软件传播的延续性,在自由软件运动还创造出GPL通用公众许可协议,它的基本原则是你可以自由的运行、拷贝、修改和再发行使用GPL授权的软件,但是你也必须允许别人也能够自由的运行、拷贝、修改和再发行该软件,以及你在该软件的基础上加以修改而形成的衍生软件产品,而不允许修改后的衍生代码作为私有的商业软件发布和销售。GPL协议强调,只要在一个软件中使用了GPL协议的产品,包括类库的引用、修改后的代码或者衍生代码,则该软件产品也必须使用GPL协议,必须是开源和免费的。我们熟知的linux就是在GPL下发布的,自由软件运动从伦理学道德的高度强调,我们每个人都有自由的使用软件的权利,反对软件私有,明确反对以申请专利的形式将软件产品据为私有。
不难发现,自由软件运动有点太极端、太理想化了,生活在商品化的社会,要完全如此的反商业还是很有难度的,因此也有很多人表示异议。发展到后面,又出现了开源软件,它既继承了自由软件所倡导的知识共享的理念,同时又允许人们以专利的形式从知识产品中盈利,从而保护了人们生产创造知识产品的积极性。因此,开源允许软件授权收费,或者软件本身可以以开源免费的形式提供,但是对软件的服务和维护可以收费。另外,开源社区也可以接受来自商业公司的资金支持,除此之外还有免费软件,这完全是另外一个范畴的问题了,免费软件是免费提供给用户的软件,但是通常都会有其他的限制,源代码不一定会公开,而且使用者也没有复制、研究、修改和再发布的权利,例如,我们现在使用的很多商业软件都提供了免费的版本或者试用期供用户使用。
编译方式的演进
我们知道,计算机只认识二进制的机器语言,用高级语言编写的源程序,计算机是不能够直接识别的。因此,当我们执行一个高级语言编写的程序时,需要首先把它编译成计算机能够执行的机器语言,传统的翻译方式有两种,编译和解释。
编译型语言在程序执行之前,首先通过编译器把整个高级语言源程序翻译成计算机可以识别的机器语言,运行时,直接运行这个翻译好的可执行程序就可以了。例如C语言就是典型的编译型语,也如果使用我C语言的话,我们有这样的经验,即使最后一行少了一个符号,整个编译器就无法通过,必须编译完整个程序之后,才能够生成可执行文件执行程序。
而解释型语言就没有这个编译的过程,在程序执行的时候,解释器对源程序逐条翻译并逐条执行,因此后面的出现错误不会影响到当前代码的执行。例如,Javascript就属于解释型语言。因此,我们在执行网页的时候会发现,虽然有时候网页出错了,但是页面的前面的一部分还会正常显示,只是从某个出错的地方才开始显示不出来了。
对于编译型语言而言,由于已经提前将程序全部编译为机器语言,在运行时直接在处理器上执行机器语言,因此效率比较高。不同型号的cpu对应不同的机器语言,当程序需要运行在不同的平台上时,就需要使用不同的编译器,将源程序翻译成对应的机器语言。这就如同我们出国旅游,要根据所去的国家找不同的翻译,将我们的母语翻译成相应的语言。同样我们使用高级语言编写好的程序,如果要运行于不同平台的电脑上,就要使用不同的编译器,把它翻译成各种不同的机器语言,