Python程序设计- 面向人工智能应用开发(TensorFlow、Keras、PyTorch)课件 第八章 使用TensorFlow库开发AI应用_第1页
Python程序设计- 面向人工智能应用开发(TensorFlow、Keras、PyTorch)课件 第八章 使用TensorFlow库开发AI应用_第2页
Python程序设计- 面向人工智能应用开发(TensorFlow、Keras、PyTorch)课件 第八章 使用TensorFlow库开发AI应用_第3页
Python程序设计- 面向人工智能应用开发(TensorFlow、Keras、PyTorch)课件 第八章 使用TensorFlow库开发AI应用_第4页
Python程序设计- 面向人工智能应用开发(TensorFlow、Keras、PyTorch)课件 第八章 使用TensorFlow库开发AI应用_第5页
已阅读5页,还剩16页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章

使用TensorFlow库开发AI应用请在此输入您的副标题汇报人:代用名目录8.1TensorFlow的基本概念8.2TensorFlow运行原理8.3TensorFlow深度学习8.4TensorFlow实践案例引言:本章介绍谷歌的机器学习框架TensorFlow,主要介绍TensorFlow的基本概念及使用,特别是TensorFlow的深度学习程序相关的使用,最后通过卷积神经网络和循环神经网络的案例展示TensorFlow程序的应用。8.1TensorFlow的基本概念TensorFlow是由谷歌人工智能团队谷歌大脑开发和维护的深度学习平台,目前人工智能领域主流的开发平台,在全球有着广泛的用户群体。TensorFlow有着优秀的架构设计,通过张量流进行数据传递和计算,用户可以清晰地看到张量流动的每一个环节。可以轻松地在CPU/GPU上部署,进行分布式计算,为大数据分出现提供计算能力的支撑。它跨平台性好,灵活性强。TensorFlow不仅在Linux、Mac、和Windows系统中运行,甚至可以再终端下工作。TensorFlow属于定义与运行相分离的运行机制,从操作层面可以抽象成两种,模型的构建和模型的运行。8.2TensorFlow运行原理8.2.1张量8.2.2变量8.2.3数据流图和会话TensorFlow支持以下三种类型的张量:张量是TensorFlow的核心数据单位,在本质上是一个任意维的数组。可用的张量类型包括常数、变量、张量占位符和稀疏张量。·常量:常量是其值不能改变的张量。·变量:当一个量在会话中的值需要更新时,使用变量来表示。例如,在神经网络中,权重需要在训练期间更新,可以通过将权重声明为变量来实现。变量在使用前需要被显示初始化。另外需要注意的是,常量存储在计算图的定义中,每次加载图时都会加载相关变量。换句话说,它们是占用内存的。另一方面,变量又是分开存储的。它们可以存储在参数服务器上。·占位符:用于将值输入TensorFlow图中。它们可以和feed_dict一起使用来输入数据。在训练神经网络时,它们通常用于提供新的训练样本。在会话中运行计算图时,可以为占位符赋值。这样在构建一个计算图时不需要真正地输入数据。需要注意的是,占位符不包含任何数据,因此不需要初始化它们。8.2.1张量张量的秩是它的维数,而它的形状是一个整数元组,指定了数组中每个维度的长度。张量按NumPy数组的方式进行切片和重构。张量有23种数据类型,包括4类浮点实数、2类浮点复数、13类整数、逻辑、字符串和两个特殊类型,数据类型之间可以互相转换。TensorFlow中的张量是数据流图中的单位,可以不具有值,但在图构建完毕后可以获取其中任意张量的值,该过程被称为“评估(Evaluate)”。TensorFlow无法直接评估在函数内部或控制流结构内部定义的张量。如果张量取决于队列中的值,那么只有在某个项加入队列后才能评估。8.2.2变量变量是可以通过操作改变取值的特殊张量。变量必须先初始化后才可使用,低阶API中定义的变量必须明确初始化,高阶API例如Keras会自动对变量进行初始化。TensorFlow可以在tf.Session开始时一次性初始化所有变量,对自行初始化变量,在tf.Variable上运行的tf.get_variable可以在定义变量的同时指定初始化器。Tensorflow提供变量集合以储存不同类型的变量,默认的变量集合包括:·本地变量:tf.GraphKeys.LOCAL_VARIABLES·全局变量:tf.GraphKeys.GLOBAL_VARIABLES·训练梯度变量:tf.GraphKeys.TRAINABLE_VARIABLES用户也可以自行定义变量集合。在对变量进行共享时,可以直接引用tf.Variables,也可以使用tf.variable_scope进行封装。8.2.3数据流图和会话TensorFlow在数据流编程下运行,具体地,使用数据流图(tf.Graph)表示计算指令间的依赖关系,随后依据图创建会话(tf.Session)并运行图的各个部分。tf.Graph包含了图结构与图集合两类相关信息,其中图结构包含图的节点(tf.Operation)和边缘(张量)对象,表示各个操作组合在一起的方式,但不规定它们的使用方式,类似于汇编代码;图集合是在tf.Graph中存储元数据集合的通用机制,即对象列表与键(tf.GraphKeys)的关联。例如当用户创建变量时,系统将其加入变量集合,并在后续操作中使用变量集合作为默认参数。构建tf.Graph时将节点和边缘对象加入图中不会触发计算,图构建完成后将计算部分分流给tf.Session实现计算。tf.Session拥有物理资源,通常与Python的with代码块中使用,在离开代码块后释放资源。在不使用with代码块的情况下创建tf.Session,应在完成会话时明确调用tf.Session.close结束进程。调用Session.run创建的中间张量会在调用结束时或结束之前释放。tf.Session.run是运行节点对象和评估张量的主要方式,tf.Session.run需要指定fetch并提供供给数据(feed)字典,用户也可以指定其他选项以监督会话的运行。这里使用低阶API以批量梯度下降的线性回归为例展示tf.Graph的构建和tf.Session的运行。TensorFlow的低阶API可以保存模型和学习得到的变量,对其进行恢复后可以无需初始化直接使用。对张量的保存和恢复使用tf.train.Saver。使用检查点工具tf.python.tools.inspect_checkpoint可以查看文件中保存的张量。TensorFlow保存的模型使用SavedModel文件包,该文件包含是一种独立于语言(language-neutral)且可恢复的序列化格式,使较高级别的系统和工具可以创建、使用和转换TensorFlow模型为SavedModel。tf.saved_modelAPI可以直接与SavedModel进行交互,tf.saved_model.simple_save用于保存模型,tf.saved_model.loader.load用于导入模型。上述保存方法适用于大部分图和会话,但具体地,用户也可使用构建器(builderAPI)手动构建SavedModel。了解TensorFlow的API有助于在应用时得心应手。下面介绍的是常用API,在后面的示例中基本上都会用到。这里主要介绍基于Python的API,基于其他语言的API也大同小异,重要的是理解API的功能及其背后的原理。TensorFlow的计算表现为数据流图,所以tf.Graph类中包含一系列表示计算的操作对象(tf.Operation),以及在操作之间流动的数据—张量对象(tf.Tensor)。与图相关的API均位于tf.Graph类中。tf.Operation类代表图中的一个节点,用于计算张量数据。该类型由节点构造器(如tf.matmul()或者Graph.create_op())产生。例如,c=tf.matmul(a,b)创建一个Operation类,其类型为MatMul的操作类。与操作相关的API均位于tf.Operation类中。tf.Tensor类是操作输出的符号句柄,它不包含操作输出的值,而是提供了一种在tf.Session中计算这些值的方法。这样就可以在操作之间构建一个数据流连接,使TensorFlow能够执行一个表示大量多步计算的图形。与张量相关的API均位于tf.Tensor类中。8.3TensorFlow深度学习8.3.1激活函数8.3.2卷积函数8.3.3池化操作8.3.4分类函数8.3.5优化器本节主要介绍TensorFlow中构建神经网络所需的神经元函数,包括各种激活函数、卷积函数、池化函数、损失函数、优化器等。8.3.1激活函数激活函数(ActivationFunction)运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经网络。神经网络之所以能解决非线性问题(如语音、图像识别),本质上就是激活函数加入了非线性因素,弥补了线性模型的表达力,把“激活的神经元的特征”通过函数保留并映射到下一层。1.sigmoid函数2.tanh函数3.relu函数4.dropout函数8.3.2卷积函数卷积函数是构建神经网络的重要支架,是在一批图像上扫描的二维过滤器。卷积函数定义在tensorflow-1.1.0/tensorflow/python/ops下的nn_impl.py和nn_ops.py文件中。一共有9个函数。(1)tf.nn.convolution(2)tf.nn.conv2d(3)tf.nn.depthwise_conv2d(4)tf.nn.separable_conv2d(5)tf.nn.atrous_conv2d(6)tf.nn.conv2d_transpose(7)tf.nn.conv1d(8)tf.nn.conv3d(9)tf.nn.conv3d_transpose8.3.3池化操作池化操作是利用一个矩阵窗口在张量上进行扫描,将每个矩阵窗口中的值通过取最大值或平均值来减少元素个数。每个池化操作的矩阵窗口大小是由ksize指定的,并且根据步长strides决定移动步长。在神经网络中,池化函数一般跟在卷积函数的下一层,它们也被定义在tensorflow-1.1.0/tensorflow/python/ops下的nn.py和gen_nn_ops.py文件中。池化操作通过池化函数实现,下面就分别来说明。(1)tf.nn.avg_pool(2)tf.nn.max_pool(3)tf.nn.max_pool_with_argmax(4)avg_pool3d()和max_pool3d()(5)fractional_avg_pool()和fractional_max_pool()(6)tf.nn.pool8.3.4分类函数TensorFlow中常见的分类函数主要有sigmoid_cross_entropy_with_logits、softmax、log_softmax、softmax_cross_entropy_with_logits等,它们也主要定义在tensorflow-1.1.0/tensorflow/python/ops的nn.py和nn_ops.py文件中。(1)sigmoid_cross_entropy_with_logits(2)softmax(3)log_softmax(4)softmax_cross_entropy_with_logits(5)sparse_softmax_cross_entropy_with_logits8.3.5优化器如何加速神经网络的训练呢?目前加速训练的优化方法基本都是基于梯度下降的,只是细节上有些差异。梯度下降是求函数极值的一种方法,学习到后就是求损失函数的极值问题。TensorFlow提供了很多优化器(optimizer),我们重点介绍下面这8个:

classtf.train.GradientDescentOptimizer。

classtf.train.AdadeltaOptimizer。

classtf.train.AdagradOptimizer。

classtf.train.AdagradDAOptimizer。

classtf.train.MomentumOptimizer。

classtf.train.AdamOptimizer。

classtf.train.FtrlOptimizer。

classtf.train.RMSPropOptimizer。这8个优化器对应8种优化方法,分别是梯度下降法(BGD和SGD)、Adadelta法、Adagrad法(Adagrad和AdagradDAO)、Momentum法(Momentum和NesterovMomentum)、Adam法、Ftrl法和RMS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论