1、人工智能极简历史第1章深度学习基于Python语言和Tensorflow平台重要人物及其贡献为什么要了解人工智能的发展历史主要理论和关键技术重要事件简要了解在人工智能发展历程中:出现的经纬(时间顺序和逻辑关系)有助于更好地理解书中内容,“知其然,更知其所以然”。了解人工智能发展的历史脉络了解深度学习技术的由来和最新发展动向01HISTORY02RISE&FALL03OUTLOOKtarget目标体会人工智能发展历程中各个波峰波谷的缘由目 录 导 航1.11.21.31.4重要奠基时期人工智能的诞生第一个快速发展期人工智能的第一个寒冬Contents&关键要素之一:对神经元的研究和模型化人工智能
2、研究的萌芽圣地亚哥拉蒙-卡哈尔(西班牙语:Santiago Ramn y Cajal,1852年5月1日1934年10月17日),西班牙病理学家、组织学家,神经学家,1906年诺贝尔生理学或医学奖得主。被认为是现代神经科学之父,绘图技能出众,他关于脑细胞的几百个插图至今仍用于教学与人类对自身大脑的研究息息相关&拉蒙-卡哈尔的贡献人工神经元的研究和人工神经元模型的提出明确阐述了神经元(也叫做神经细胞)的独立性和神经元之间通过树枝状触角相互连接的关系奠定了生物神经网络的基础,也为人工神经网络(Artificial Neural Network)提供了重要的参考依据MP模型的提出1943年,神经学家
3、沃伦麦卡洛克(Warren McCulloch)和年轻的数学家沃尔特皮茨(Walter Pitts)提出了一个人工神经元的模型麦卡洛克-皮茨神经元模型(McCulloch-Pitts Neuron Model),简称MP模型+Warren McCullochWalter Pitts迄今为止,神经网络的基本单元仍然在使用这个模型 MP模型最初的模型现代简洁的表达MP模型的组网神经元组成神经网络的示意图&关键要素之二:计算机和程序的出现计算机的发明对人工智能研究的促进1945 年末至 1946 年初,世界上第一台数字计算机ENIAC诞生在美国宾夕法尼亚大学冯诺伊曼体系结构迄今为止,冯诺伊曼体系结构
4、在各类计算机中仍在广泛被使用计算机计算机和和程序程序的出现,使得的出现,使得人工智能人工智能的实现有了的实现有了硬件和硬件和软件基础软件基础&关键要素之三:图灵测试的提出图灵测试坚信人工智能可以成功,并确定了一个判断人工智能成功与否的标准。目 录 导 航1.11.21.31.41.5重要奠基时期人工智能的诞生第一个快速发展期人工智能的第一个寒冬AI研究的沉默探索与复苏Contents&达特茅斯会议(Dartmouth Conference)人工智能正式诞生1956年夏天,以约翰麦卡锡、马文明斯基、克劳德香农、艾伦纽厄尔、赫伯特西蒙、纳撒尼尔罗切斯特等为首的一批当时科学界的年轻才俊在美国的达特茅
5、斯开会,会议名字叫做人工智能夏季研讨会。在会议上,大家一起研究探讨了用机器模拟智能的一系列有关问题,并首次正式提出了“人工智能”这一术语,它标志着“人工智能”这门新兴学科的正式诞生,因此之后大家普遍认为1956年是人工智能的元年。AI=Artificial Intelligence目 录 导 航1.21.31.41.51.6人工智能的诞生第一个快速发展期人工智能的第一个寒冬AI研究的沉默探索与复苏第二次冬天Contents弗兰克罗森布拉特和他的感知机感知机模型的出现,使人类历史上开始了真正意义上的机器学习时代。约翰麦卡锡和LISP语言约翰麦卡锡John McCarthy 发明了第一个面向人工智
6、能的高级计算机语言LISP 函数式程序设计语言 实现了树形数据结构、自动存储管理、动态类型、条件表达式、递归运算等在当时较为高级的功能目 录 导 航1.31.41.51.61.7第一个快速发展期人工智能的第一个寒冬AI研究的沉默探索与复苏第二次冬天再一次腾飞Contents马文明斯基所起的作用马文明斯基是人工智能的创始人之一,但也是AI第一次寒冬的重要因素1969年,明斯基与他人合著的Perceptron一书中,断定了感知机的局限性(即无法处理非线性问题)。詹姆斯莱特希尔的报告1973年,著名数学家詹姆斯莱特希尔(James Lighthill)爵士向英国科学研究委员会提交报告,否定AI达到了
7、预期的进展,导致各国政府对AI领域停止资金投入,标志着人工智能第一个寒冬的开始。The Lighthill debate on Artificial Intelligence:The general purpose robot is a mirageSir James Lighthill目 录 导 航1.41.51.61.71.8人工智能的第一个寒冬AI研究的沉默探索与复苏第二次冬天再一次腾飞未来展望Contents沉默的探索阶段人们对AI的研究并未停止专家系统的研究 另一条探索之路&专家系统与Prolog语言的出现专家系统是汇聚了某个领域内的专家知识和经验,由计算机系统进行推理和推断,帮助和
8、辅助人类进行决策的系统。无监督学习技术的提出无监督学习是人们收集数据,让神经网络自己去发现规律并做出处理的机器学习方法,是现在乃至未来人工智能研究的重要方向之一1972年,芬兰科学家托伊沃科霍宁(Teuvo Kohonen)提出了自组织特征网络(self-organizing feature map,简称SOFM),支持无监督学习(Unsupervised Learning)反向传播算法的出现 1974年,保罗沃波斯(Paul Werbos)第一次提出了后来对神经网络的发展腾飞具有重要意义的反向传播算法反向传播算法(Backpropagation Algorithm,简称BP 算法)是根据神经
9、网络的计算结果误差来调整神经网络参数以达到训练神经网络目的的方法。但由于处于AI的寒冬期中,该方法在当时没有得到足够的重视。霍普菲尔德网络1982年,美国物理学家约翰约瑟夫霍普菲尔德(John Joseph Hopfield)提出了一种具有反馈机制的神经网络,并将动力学结合进神经网络中来。1984 年,霍普菲尔德成功实现了自己提出的神经网络模型,重新激发了人们对神经网络研究的热情。增强学习(Reinforcement Learning)&1983年,安德鲁巴托(Andrew G.Barto)、理查德萨顿(Richard S.Sutton)等人发表了关于增强学习的文章。&增强学习是研究机器如何在
10、不断变化的环境中相应地做出最合适的反应,通过让机器不断调整自己的行为以求获得更好的长效回报(Long-term Reward)来实现机器学习,被广泛用于无人驾驶、电子竞技等方向。玻尔兹曼机(Boltzmann Machine)1985年,大卫艾克利、杰弗里辛顿(Geoffrey Hinton)和特里塞吉诺斯基等人基于霍普菲尔德神经网络加入了随机机制,提出了玻尔兹曼机(Boltzmann Machine)的模型,这个模型由于引入了随机振动的机制,一定程度上具备了让神经网络摆脱局部最优解的能力。反向传播算法的发展 1986年,大卫鲁姆哈特(David Rumelhart)和詹姆斯麦克莱兰(Jame
11、s McClelland)在(Parallel Distributed Processing:Explorations in the Microstructure of Cognition)一文中,重新提出了反向传播学习算法并给出了完整的数学推导过程。同一时期,辛顿、罗纳德威廉姆斯、大卫帕克和杨立昆等人也分别做出了关于BP算法的独立研究和贡献。BP算法正式出现的意义在于,对于如何更高效地训练神经网络,让神经网络更有序地进行学习,提供了有效的、可遵循的理论和方法,这在以后神经网络尤其是深度学习领域是一个里程碑式的事件,至今BP方法仍然是训练多层神经网络的最主要、最有效的方法。多层前馈神经网络多层
12、前馈神经网络是一个包含输入层、多个隐藏层和输出层在内的神经网络,所谓的前馈指的是神经网络中的各层均只从上一层接收信号并向下一层输出信号,即每层只向前传递信号而不向后反馈梯度下降算法梯度下降算法是训练神经网络的反向传播算法的基础之一目 录 导 航1.51.61.71.8AI研究的沉默探索与复苏第二次冬天再一次腾飞未来展望Contents人工智能的第二个冬天 幅度不大:两个原因:人们期望值明显降低;没有类似第一次AI寒冬的理论上的重大挫折。时间范围不明显:有观点认为是从1987年华尔街金融危机带来的对人工智能投资大幅缩减开始的。主要起因:个人电脑(Personal Computer,简称PC)的出
13、现及其蓬勃发展。目 录 导 航1.61.71.8第二次冬天再一次腾飞未来展望Contents腾飞的要素之一 计算机性能提升计算机性能提升GPUGPU的发展的发展云计算的出现云计算的出现计算能力不再是瓶颈计算能力不再是瓶颈 计算机综合计算能力的大幅提升+人们对软硬件驾驭能力的提高腾飞的要素之二 大数据让神经网络不再缺乏训练数据 大数据的出现腾飞的要素之三 神经网络研究的成熟化 反向传播学习算法研究进一步成熟 卷积神经网络(Convolutional Neural Network,简称CNN)的发明 循环神经网络(Recurrent Neural Network,简称RNN)的研究 长短期记忆网络
14、(Long Short-Term Memory Network,简称LSTM)的提出 深度学习技术理论的提出重要发明(卷积网络)带来黎明LeNet用于手写文字的识别1989年,Yann LeCun(中文名字杨立昆)发明了具有实际研究价值的第一个卷积神经网络模型LeNet。开启新时代的AlexNet神经网络2012年,在ImageNet工程举办的年度图像识别大赛(Annual ImageNet Large Scale Visual Recognition Challenge)上,包括亚历克斯克里泽夫斯基(Alex Krizhevsky),辛顿等人在内的团队推出的AlexNet神经网络,获得了当年
15、的冠军。先进的AlexNet神经网络使用了综合几种新方法、已经较为成型的深度学习技术AlphaGo战胜世界冠军成为这一次AI大发展(特别是“深度学习”的概念)广为世人所知的标志事件目 录 导 航1.71.8再一次腾飞未来展望Contents人工智能的分类弱人工智能机器的智能在一些特定领域或具体任务上接近或超越人类的水平通用人工智能机器在所有需要智能的方面具备和人一样解决各种问题的能力超人工智能机器具备全方面超越人脑的能力,包括思维、创造性和社交能力人工智能的应用与研究方向&计算机视觉图像与视频分类、物体与边界识别、动作识别、图像内容语义归纳、风格转换、图像合成、智能搜索等&自然语言处理智能翻译
16、、语义识别、语义理解、情感判断、问题响应、文字生成等&智能控制(综合性)无人驾驶、智能电子竞技、智能交流、远程智能监控、客服智能座席等互助互利 共同进步深度学习 基于Python语言和Tensorflow平台开发环境准备第2章深度学习基于Python语言和Tensorflow平台安装课程所需的Python语言和TensorFlow框架快速学习或温习Python语言编程01INSTALL02OPTIMIZE03LEARNtarget目标优化开发环境目 录 导 航12345Python与TensorFlow简介Python的安装TensorFlow的安装优化开发环境Python编程快速入门Cont
17、entsPython语言简介 Python是目前人工智能领域使用最广泛的语言Python语言是荷兰人Guido van Rossum于1989年开始开发,并于1991年推出了第一个正式版本。Python语言名字的由来据说是基于Guido van Rossum对一个英国喜剧团体Monty Python的喜爱;Python本身是“蟒蛇”的意思Python语言面世以来,由于其语法优雅简洁而又不失严谨,编程快捷而又易于扩展功能,很快受到大家的喜爱,这些年来在各大开发语言排行榜上始终名列前茅Python语言特点解释型高级计算机语言免费开源语法优雅简洁编程快捷方便易于扩展有大量成熟类库PythonPyth
18、on语言的分支版本Python 2.x 早期版本,存在一些缺陷 由于历史原因,使用者仍很多,可用类库也很多 2020年将不再被支持Python 3.x 语法更严谨规范 更好的面向对象编程支持 改进的Unicode编码支持可以更好地支持英文外的各种语言(包括中文)迭代器、字典处理、文件处理等更完善的编程功能改进和类库支持我们应选用Python 3.x系列版本!主流的深度学习开发框架 老牌的平台:Theano、Caffe、Torch等:均具备成熟的开发工具、模式、功能和成功案例。较新的平台:谷歌的TensorFlow、微软的CNTK、百度的PaddlePaddle、Apache的MXNet等。Te
19、nsorFlow的特点&良好的企业支持及文档&选用使用广泛的Python语言为主并能应用于C+、Java、Javascript、Swift、Golang等多种常用开发语言&功能齐全(具备GPU加速支持等)、性能相对较优异&概念、模式较规范目 录 导 航12345Python与TensorFlow简介Python的安装TensorFlow的安装优化开发环境Python编程快速入门ContentsPython官方网站http:/python.org下载合适版本的安装程序下载合适版本的安装程序 目前3.7版本仍有兼容问题,建议安装3.6版本 如有可能,最好安装64位版本 注意选对对应操作系统的版本按
20、安装包说明一步步安装Python 注意勾选此处 选择此处以便修改安装位置修改安装位置 注意要勾选上pip修改安装位置 注意修改默认安装路径到较方便的位置 注意要勾选上此处顺利安装完毕继续一步一步即可顺利完成安装验证安装打开Windows的CMD命令提示符程序,输入python并回车,进入Python的交互式命令界面,即表示安装成功。也可以输入任意算式把Python当一个高级计算器用一下退出Python交互式界面Python的交互式命令界面中输入quit()函数即可退出验证pip是否成功安装输入pip-version命令并回车,有类似图中的响应输出即表示pip已正确安装pip是Python语言的
21、包管理器,也就是用来安装附加功能或第三方提供的代码包的软件目 录 导 航12345Python与TensorFlow简介Python的安装TensorFlow的安装优化开发环境Python编程快速入门ContentsTensorFlow官方网站http:/tensorflow.orgTensorFlow安装&在命令行模式下直接用pip安装即可pip install tensorflow 出现 Successfully installed 字样即为安装成功验证TensorFlow安装&在Python交互式命令界面下输入下面两行命令import tensorflowprint(tensorflow
22、._version_)注意均为两个下划线字符更新TensorFlow版本使用下述命令可以将TensorFlow更新到最新版本pip install-U tensorflow 安装TensorFlow时可能的问题如果在安装或运行TensorFlow出现一些问题,可以依次尝试:预先安装Microsoft Visual C+Redistributable 预先安装Microsoft Build Tools 某些计算机的CPU(主要是支持的指令集)较为特殊,需要在网络上搜索对应CPU的版本目 录 导 航12345Python与TensorFlow简介Python的安装TensorFlow的安装优化开发
23、环境Python编程快速入门Contents打造舒适的开发环境&修改Windows资源管理器的设置去除勾选“隐藏已知文件类型的扩展名”等&安装Windows命令行界面CMD的替代软件推荐 Cmder,备选 Console 2、PowerCmd等&安装Windows记事本的替代软件来编辑文本文件和Python程序文件推荐Notepad2-mod,备选 Sublime Text,Editpad Lite等&安装集成式Python开发环境推荐PyCharm,也可以用Sublime Text加装Python开发插件来替代目 录 导 航12345Python与TensorFlow简介Python的安装T
24、ensorFlow的安装优化开发环境Python编程快速入门Contents输入Python程序使用文本编辑器输入、修改和保存程序使用PyCharm集成式开发环境(IDE)注意文件编码要选 UTF-8运行 Python 程序Python程序文件的扩展名为.py&在Python交互式界面中一行一行输入并执行 a=16 b=18.9 print(a)16 print(b)18.9&在命令行界面中执行(最常用的方式)变量(variable)a=19a=a+1print(a)变量是我们在编写程序时存放数值的地方,存放数值的过程叫做给变量“赋值”注意等号与数学上等式中等号的区别,这里表示把右边的数值存入
25、左边的变量中存放文字的变量 字符串变量表达一串数值 数组变量函数及其参数函数(function),又叫做“方法”(method)是预先写好的一段可以重复使用的代码 print函数的作用是将参数作为一个表达式运算后输出其数值对象与面向对象编程p 对象是对事物进行分类的一种方法p 一般来说,对象类表示分类,例如“人”、“男人”;对象实例(有时候也直接简称为对象)代表对象类中的具体个体,例如“小明”、“张三”等p 每个对象类都可以包含属性和方法,例如“人”都有“名字”这个属性,也有“走路”这个方法,而具体对象实例“张三”的名字属性的值就是“张三”p 面向对象编程是在编程的设计和编码阶段,把所有涉及到
26、的内容均看作一个个“对象”来处理的方法论系统类库和第三方类库 引用系统类库sys 调用系统类库sys中的方法条件判断与分支a=10b=15 if a b:print(a-b)else:print(b-a)注意缩进代表的语法含义循环for i in range(5):a=i+1print(a)缩进的两行代码语句将被重复执行5次注释h=175#h代表身高#下面这句话输出的是标准体重print(h-80)*0.7)在程序中加入良好的注释,有助于自己的记忆和旁人的理解注释,以“#”开始,可以在一行中间任意位置开始麻雀虽小五脏俱全的一段代码import sys Adam_info=height:175,
27、weight:60Eve_info=165,50#两个数字分别代表夏娃的身高和体重 if Eve_info1 Adam_infoweight:print(很遗憾,夏娃的体重现在是+str(Eve_info1)+公斤。)elif Eve_info1=Adam_infoweight:print(很遗憾,夏娃的体重和亚当一样。)sys.exit(0)else:print(重要的事儿说3遍!)for i in range(3):print(夏娃没有亚当重,她的体重只有+str(Eve_info1)+公斤。)互助互利 共同进步深度学习 基于Python语言和Tensorflow平台初识TensorFlo
28、w第3章深度学习基于Python语言和Tensorflow平台了解本章引入需要神经网络解决的问题学习训练神经网络的基本方法010203target目标学习用神经网络的基本结构、表达方式和编程实现目 录 导 航123三好学生成绩问题的引入搭建对应的神经网络训练神经网络Contents三好学生问题的引入几位家长猜测学校评判三好学生的规则Guess?学校评选三好学生的规则总分总分 =德育分德育分 *60%60%+智育分智育分*30%+体育分体育分 *10%10%得分德育分智育分体育分家长不知道这个规则!家长们对问题的归纳 已知学校一定是以德育分、智育分和体育分三项分数的总分来确定三好学生的计算总分时
29、,三项分数应该有各自的权重系数各自孩子的三项分数都已经知道,总分也已经知道 未知经过家长们的分析,只有三项分数各自乘以的权重系数是未知的问题演变成 求解方程式 w1x+w2y+w3z=A 中的三个w即权重其中,x、y、z、A分别对应几位学生的德育分、智育分、体育分和总分如果已知两位学生的成绩90*w1+80*w2+70*w3=85 98*w1+95*w2+87*w3=96 两个方程式解三个未知数依然无法求解目 录 导 航123三好学生成绩问题的引入搭建对应的神经网络训练神经网络Contents使用神经网络来尝试解决该问题使用图中的神经网络来表达该问题输入层(Input Layer)隐藏层(Hi
30、dden Layer)输出层(Output Layer)X1X2X3*W1*W2*W3yn1n2n3输入节点即德智体三项分数输出节点即总分隐藏层的神经元节点神经网络的代码import tensorflow as tf x1=tf.placeholder(dtype=tf.float32)x2=tf.placeholder(dtype=tf.float32)x3=tf.placeholder(dtype=tf.float32)w1=tf.Variable(0.1,dtype=tf.float32)w2=tf.Variable(0.1,dtype=tf.float32)w3=tf.Variable
31、(0.1,dtype=tf.float32)n1=x1*w1n2=x2*w2n3=x3*w3 y=n1+n2+n3 sess=tf.Session()init=tf.global_variables_initializer()sess.run(init)result=sess.run(x1,x2,x3,w1,w2,w3,y,feed_dict=x1:90,x2:80,x3:70)print(result)代码逐段讲解import tensorflow as tf 导入TensorFlow的类库(注意是全小写),并给它起一个别名tf,下面的程序中就可以用tf来代替较长的tensorflow代码逐
32、段讲解x1=tf.placeholder(dtype=tf.float32)x2=tf.placeholder(dtype=tf.float32)x3=tf.placeholder(dtype=tf.float32)定义x1,x2,x3三个占位符(placeholder),作为神经网络的输入节点,来准备分别接收德育、智育、体育三门分数作为神经网络的输入数据类型一般都设置为浮点数(小数),即使分数都是整数代码逐段讲解w1=tf.Variable(0.1,dtype=tf.float32)w2=tf.Variable(0.1,dtype=tf.float32)w3=tf.Variable(0.1,
33、dtype=tf.float32)定义w1,w2,w3三个可变参数(variable,为与编程中的变量区分)初始值先随意设置为0.1代码逐段讲解n1=x1*w1n2=x2*w2n3=x3*w3定义三个隐藏层节点 n1、n2n3,实际上是它们的计算算式代码逐段讲解y=n1+n2+n3定义输出层节点 y,也就是总分的计算公式代码逐段讲解sess=tf.Session()init=tf.global_variables_initializer()sess.run(init)定义神经网络的会话对象,并初始化所有的可变参数代码逐段讲解result=sess.run(x1,x2,x3,w1,w2,w3,y
34、,feed_dict=x1:90,x2:80,x3:70)print(result)用三门分数送入神经网络来运行该神经网络并获得该神经网络输出的节点值 y运行程序并观察神经网络的输出结果根据随意设置的可变参数初始值计算出的输出结果显然是不正确的目 录 导 航123三好学生成绩问题的引入搭建对应的神经网络训练神经网络Contents训练神经网络的过程神经网络在投入使用前,都要经过训练(train)的过程才能有准确的输出训练数据&神经网络训练时一定要有训练数据&有监督学习中,训练数据中的每一条是由一组输入值和一个目标值组成的&目标值就是根据这一组输入数值应该得到的“标准答案”&一般来说,训练数据越
35、多、离散性(覆盖面)越强越好代码逐段讲解x1=tf.placeholder(dtype=tf.float32)x2=tf.placeholder(dtype=tf.float32)x3=tf.placeholder(dtype=tf.float32)yTrain=tf.placeholder(dtype=tf.float32)给神经网络增加一个输入项 目标值 yTrain,用来表示正确的总分结果代码逐段讲解y=n1+n2+n3loss=tf.abs(y-yTrain)optimizer=tf.train.RMSPropOptimizer(0.001)train=optimizer.minimi
36、ze(loss)增加误差函数 loss,优化器optimizer 和 训练对象 traintf.abs函数用于取绝对值暂时使用RMSProp优化器,其中参数是学习率误差函数和训练对象 误差函数(又叫损失函数):用于让神经网络来判断当前网络的计算结果与目标值(也就是标准答案)相差多少。训练对象:被神经网络用于控制训练的方式,常见的训练的方式是设法使误差函数的计算值越来越小。代码逐段讲解result=sess.run(train,x1,x2,x3,w1,w2,w3,y,yTrain,loss,feed_dict=x1:90,x2:80,x3:70,yTrain:85)print(result)re
37、sult=sess.run(train,x1,x2,x3,w1,w2,w3,y,yTrain,loss,feed_dict=x1:98,x2:95,x3:87,yTrain:96)print(result)训练两次并查看输出结果,注意与前面的区别:训练时要在sess.run函数中加上train这个训练对象注意此处是自动折行注意如何“喂”数据训练结果w1、w2、w3和计算结果 y 已经开始有了变化循环进行多次训练for i in range(5000):result=sess.run(train,x1,x2,x3,w1,w2,w3,y,yTrain,loss,feed_dict=x1:90,x2
38、:80,x3:70,yTrain:85)print(result)result=sess.run(train,x1,x2,x3,w1,w2,w3,y,yTrain,loss,feed_dict=x1:98,x2:95,x3:87,yTrain:96)print(result)循环训练5000轮,每轮两次训练结果w1、w2、w3已经非常接近于预期的0.6、0.3、0.1,y 也非常接近于目标值练习p 假设另一个学校有两位学生的三项成绩和总分假设另一个学校有两位学生的三项成绩和总分如下,试用本章中的方法,求得该学校的三好如下,试用本章中的方法,求得该学校的三好学生总分计算规则。学生总分计算规则。学
39、生1:三项分数分别为92、98、90,总分94;学生2:三项分数分别为92、99、98,总分96;p 尝试改变可变参数尝试改变可变参数w1w1、w2w2、w3w3的初始值,观察的初始值,观察执行后的效果。执行后的效果。互助互利 共同进步深度学习 基于Python语言和Tensorflow平台简化神经网络模型第4章深度学习基于Python语言和Tensorflow平台了解标量、向量、张量等概念了解线性问题的概念010203target目标掌握如何用向量形式简化神经网络结构并编程实现目 录 导 航123概念补充 张量、向量、标量等简化神经网络线性问题Contents三好学生问题回顾几位家长猜测学校
40、评判三好学生的规则Guess?总分总分 =德育分德育分 *60%60%+智育分智育分*30%+体育分体育分 *10%10%知识补充 如何在Python程序运行时查看变量当时的取值 name=Adam print(name:%s%name)name:Adam x=101 y=12.35 print(x=%d%x)x=101 print(y=%f%y)y=12.350000 字符串类型的变量整数和浮点数类型的变量概念补充 张量import tensorflow as tf x1=tf.placeholder(dtype=tf.float32)x2=tf.placeholder(dtype=tf.f
41、loat32)x3=tf.placeholder(dtype=tf.float32)yTrain=tf.placeholder(dtype=tf.float32)print(x1:%s%x1)w1=tf.Variable(0.1,dtype=tf.float32)w2=tf.Variable(0.1,dtype=tf.float32)w3=tf.Variable(0.1,dtype=tf.float32)print(w1:%s%w1)n1=x1*w1n2=x2*w2n3=x3*w3print(n1:%s%n1)y=n1+n2+n3print(y:%s%y)修改上一章的神经网络程序代码,增加几条
42、语句,查看几个不同类型的变量概念补充 张量x1:Tensor(Placeholder:0,dtype=float32)w1:n1:Tensor(mul:0,dtype=float32)y:Tensor(add_1:0,dtype=float32)程序运行后的输出结果:&x1、n1、y 都是张量(Tensor),&w1 是可变参数(Variable)也就是说:在神经网络中,输入节点、隐藏层节点、输出节点都是张量也就是说:在神经网络中,参与节点运算的可变参数(权重)不是张量表示经过何种计算(操作)得到该张量分别表示该计算的序号和结果的序号概念补充 向量和标量与数学中的向量有所不同,这里的向量就是指
43、一串数字,程序中用一个一维数组来表示90,80,70因此,原来的输入数据 x1=90,x2=80,x3=70 就可以用向量表示为:x=90,80,70对应于向量,单个数字的变量我们将称之为标量目 录 导 航123概念补充 张量、向量、标量等简化神经网络线性问题Contents用向量重新组织神经网络import tensorflow as tf x=tf.placeholder(shape=3,dtype=tf.float32)yTrain=tf.placeholder(shape=,dtype=tf.float32)w=tf.Variable(tf.zeros(3),dtype=tf.floa
44、t32)n=x*w y=tf.reduce_sum(n)&在这里,x、w、n 都是三维向量,y是一个标量 定义张量时,参数中的 shape 用于指定其形态,例如 3表示是一个一维的数组,也就是一个向量。张量和可变参数也可以是多维的,将在后面讨论。tf.zeros函数的作用是得到一个初值设置为全0的数组,本例中 tf.zeros(3)将得到一个有三个数字的一维数组,也就是一个3维向量 0,0,0,注意我们两个“维”字表述代表含义的不同 tf.reduce_sum函数的作用是将数组中所有数字相加求和得到一个标量小知识点 点乘n=x*w 中的“*”号,这里代表数学上的“点乘”点乘表示两个相同维度的向
45、量,按顺序将各个数值相乘后求和90,80,70*1,2,3=90*1+80*2+70*3给神经网络“喂”向量形式的数据result=sess.run(train,x,w,y,yTrain,loss,feed_dict=x:90,80,70,yTrain:85)print(result)送入x的是向量形式的输入数据目标值送入的是标量形式的数据修改后神经网络的输出结果None,array(90.,80.,70.,dtype=float32),array(0.00316052,0.00316006,0.00315938,dtype=float32),0.0,array(85.0,dtype=floa
46、t32),85.0None,array(98.,95.,87.,dtype=float32),array(0.00554424,0.00563004,0.0056722,dtype=float32),0.88480234,array(96.0,dtype=float32),95.115196注意向量形式在计算机中用的是数组来表达简化的神经网络图知识补充 矩阵和多维数组&一维数组可以用来表达一个向量&多维数组可以用来表达一个数学中的矩阵xAll=90,80,70,98,95,87表达两位学生分数的矩阵在程序中可以用一个二维数组来表达并存入变量中知识补充 张量的阶和形态&张量可以是一个向量,即一个
47、一维数组&张量也可以是一个多维数组,来表达二维矩阵、三维矩阵甚至更多xAll=90,80,70,98,95,87例如:上例中表达学生分数的矩阵在程序中表达为一个二维数组那么xAll这个张量的阶是2(因为有行、列两个维度)、形态是 2,3(因为有2行、3列)&张量的阶是指这个多维数组的维度数&张量的形态是指用一维数组表示的张量在各个维度上的数值数量查看张量的形态import tensorflow as tf x=tf.placeholder(dtype=tf.float32)xShape=tf.shape(x)sess=tf.Session()result=sess.run(xShape,fee
48、d_dict=x:8)print(result)result=sess.run(xShape,feed_dict=x:1,2,3)print(result)result=sess.run(xShape,feed_dict=x:1,2,3,3,6,9)print(result)tf.shape函数用于获取张量的形态查看张量的形态 输出的形态结果32 3注意,一个空数组代表0阶,0阶的张量就是一个数字,也就是一个标量用Softmax函数来规范可变参数w=tf.Variable(tf.zeros(3),dtype=tf.float32)wn=tf.nn.softmax(w)n=x*wn y=tf.r
49、educe_sum(n)softmax函数的作用:将一个向量规范化为函数的作用:将一个向量规范化为一个一个所有数值相加和为所有数值相加和为1的的新向量新向量思考:为什么几项分数的几项分数的权重值之和权重值之和一定为一定为100%,也,也就是就是1.0?为什么要用Softmax函数来规范本问题中的可变参数w总分总分 =德育分德育分 *60%60%+智育分智育分*30%+体育分体育分 *10%10%目 录 导 航123概念补充 张量、向量、标量等简化神经网络线性问题Contents线性问题线性问题线性问题如果用图形来表达如果用图形来表达输入数值输入数值和和输输出数值出数值的关系,在坐标系中将是一条
50、直线的关系,在坐标系中将是一条直线y=wx增加偏移量b增加了偏移量b后,可以表达更多的线性问题y=wx+b练习p试定义一个形态为试定义一个形态为3,23,2的张量,并在的张量,并在TensorFlowTensorFlow中查看它与标量中查看它与标量7 7相乘的结果。相乘的结果。p对上题中的张量进行对上题中的张量进行softmaxsoftmax计算操作后查计算操作后查看结果。看结果。互助互利 共同进步深度学习 基于Python语言和Tensorflow平台用神经网络解决非线性问题第5章深度学习基于Python语言和Tensorflow平台了解非线性问题、分类问题的概念掌握随机生成训练数据的方法0