跟我一起学习TensorFlow与深度学习(一)

这篇博客是TensorFlow和深度学习的入门教程,从人工智能的历史开始,介绍了TensorFlow的简介、APIs、架构和数据流图。文章详细讲解了变量、常量、占位符的概念,并通过示例阐述了会话在TensorFlow中的作用。适合初学者了解TensorFlow的基本用法。
摘要由CSDN通过智能技术生成

前言

Hello!大家好!欢迎大家加入到TensorFlow框架的学习,也欢迎大家进入人工智能领域。这是我的第一篇博客,在这篇以及之后的几篇博文中,我将从一个初学者的角度来带领大家入门TensorFlow与深度学习。希望大家有所收获,加油!

人工智能、机器学习与深度学习发展历程

首先给大家看张图,这是人工智能的发展历程。
人工智能发展例程
1956年,几个计算机科学家相聚在达特茅斯会议(Dartmouth Conferences),提出了“人工智能”的概念。1959年美国的塞缪尔(Samuel)设计了一个下棋程序,这个程序具有学习能力,它可以在不断的对弈中改善自己的棋艺。达特茅斯会议之后,人工智能研究进入了20年的黄金时代。4年后,这个程序战胜了设计者本人。又过了3年,这个程序战胜了美国一个保持8年之久的常胜不败的冠军。这是最早的人工智能的出现。1964到1966年期间,诞生了世界上第一个聊天程序ELIZA,它是由麻省理工学院的人工智能学院创造的。不过由于当时计算机的计算能力有限,缺乏大量的训练数据,再加上人们当时对人工智能的期待过高,使得人工智能的发展在70年代进入了寒冬。
幸运的是,1980年卡耐基梅隆大学研发的XCON(根据顾客需求自动选配计算机组件的专家系统软件程序)正式投入使用,这成为一个新时期的里程碑,专家系统开始在特定领域发挥威力,也带动整个人工智能技术进入了一个繁荣阶段。就在这个时候神经网络又有了新的研究进展,尤其是1982年英国科学家霍普菲尔德几乎同时与杰弗里·辛顿发现了具有学习能力的神经网络算法,这使得神经网络一路发展,在后面的90年代开始商业化,被用于文字图像识别和语音识别。1988年,美国科学家朱迪亚·皮尔将概率统计方法引入人工智能的推理过程中,这也是机器学习的开始。
再后来随着深度神经网络的发展,2006年,杰弗里辛顿出版了《Learning Multiple Layers of Representation》奠定了后来神经网络的全新的架构,至今仍然是人工智能深度学习的核心技术。华裔科学家吴恩达及其团队在2009年开始研究使用图形处理器(GPU而不是CPU)进行大规模无监督式机器学习工作,尝试让人工智能程序完全自主的识别图形中的内容。在这段期间深度学习技术飞速发展,出现了kearas、caffe、tensorflow等开源深度学习框架。

TensorFlow简介

TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU、GPU、TPU,服务器,移动设备等等。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。Google于2015年将该框架开源,使其得以广泛应用。

TensorFlow APIs

APIs
大家看张图,首先是顶层api,分别是keras和estimators,keras是在tensorflow出现前就有了的学习算法框架,tensorflow出现后很好的对接了keras,使得keras成为一个高层的接口,可以根据需要调用。而estimators则是Google团队推出的另一款针对模型设计推出的框架,主要用于模型设计、估算以及模型指标。而中层api中layers用来进行卷积、池化等运算,datasets用来处理输入输出数据,metrics用于设定模型指标。
底层的api为tensorflow支持的语言,如:Python、C++、Java、Go等,他们只是在应用层进行封装,只是制定了一个运行的法则或者流程,在tensorflow真正的处理会话中并不采用命令式编程范式而是采用声明式编程范式(这点后面会提到)。所以如果用编python的思维方式去编tensorflow会出现错误。
最下面的api是程序执行的分布式执行引擎或者是本地执行引擎。

TensorFlow架构

架构
上图为tensorflow的架构,tensorflow采用了非常合理的架构,即模块化、分层式。高层模块可以调用低层模块,低层模块也可以以接口的形式向上层提供调用逻辑。

TensorFlow数据流图

TensorFlow 的名字中己经说明了它最重要的两个概念一一Tensor 和Flow 。Tensor 就是张量。张量是一种数学上常用的数据结构,可以理解为多维数组。如果说TensorFlow 的第一个词Tensor 表明了它的数据结构,那么Flow 则体现了它的计算模型。Flow 翻译成中文就是“流”,它直观地表达了张量之间通过计算相互转化的过程。
在这里插入图片描述
数据流图用“结点”(nodes)和“线”(edges)的有向图来描述数学计算。“节点” 一般用来表示施加的数学操作,但也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”(tensor)。一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行地执行运算。

基础知识

1.变量、常量及占位符

变量

TensorFlow变量主要作用是维护节点的状态的,如学习过程中的模型参数。所调用的操作是tf.Variable(value,type,name),三个参数分别为变量值、变量类型、变量名(注意此处不要和操作名混淆),返回值是变量。通过该方法创建的变量与张量一样,可以作为操作的输入输出。
注意:张量的生命周期通常依赖计算完成而结束,内存随之释放;变量则不然,变量常驻内存在每一次运行时都会更新,以实现模型参数的更新。(下面会有实例介绍)

a1 = tf.Variable([[7],[11]], tf.int16,name='a1')
a2 = tf.Variable([[Fals
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值