《TensorFlow自然语言处理》—2 理解TensorFlow

举报
华章计算机 发表于 2019/07/21 18:28:12 2019/07/21
【摘要】 本节书摘来自华章计算机《TensorFlow自然语言处理》一书中的第2章,第2.1.1节,[澳] 图珊·加内格达拉(Thushan Ganegedara) 著 马恩驰 陆 健 译。

CHAPTER 2

第2章

理解TensorFlow

在本章中,你将深入了解TensorFlow。这是一个开源分布式数值计算框架,它将成为我们实现所有练习的主要平台。

我们通过定义一个简单的计算并用TensorFlow实现它来作为TensorFlow的入门。在成功完成此操作后,我们将探讨TensorFlow是如何执行这个计算的。这将有助于我们理解该框架如何创建计算图来计算输出/并通过称为“会话”的方式执行此图。然后,通过将TensorFlow执行操作的方式与餐厅的运作进行类比,我们深入理解TensorFlow架构。

在对TensorFlow的运行方式有了良好的概念性和技术上的理解之后,我们将介绍该框架提供的一些重要的计算操作。首先,我们将讨论如何在TensorFlow中定义各种数据结构,比如变量、占位符和张量,同时我们还将介绍如何读取输入。然后,我们将执行一些与神经网络相关的操作(例如,卷积运算、定义损失函数和优化方法)。接下来,我们将学习如何使用作用域来重用和有效管理TensorFlow变量。最后,在练习中应用这些知识,实现一个可以识别手写数字图像的神经网络。

2.1 TensorFlow是什么

在第1章中,我们简要讨论了TensorFlow是什么。现在让我们更深入地认识它。Tensor-

Flow是由Google发布的开源分布式数值计算框架,主要用于减少在实现神经网络的过程中那些令人感到痛苦的细节(例如,计算神经网络权重的梯度)。TensorFlow使用计算统一设备架构(CUDA)来进一步有效实现这种数值计算,CUDA是由NVIDIA引入的并行计算平台。在https://www.tensorf?low.org/api_docs/python/上有TensorFlow的应用程序编程接口(API),可以看到TensorFlow提供了数千种操作,这使我们的工作更轻松。

TensorFlow不是一夜之间开发出来的,它是有才华、善良的人们坚持不懈的成果。他们希望通过将深度学习带给更广泛的用户来使我们的生活发生变化。如果你有兴趣,可以访问https://github.com/tensorf?low/tensorf?low查看TensorFlow代码。目前,TensorFlow拥有大约1000名贡献者,并且拥有超过25?000次成果提交,它每天都在变得越来越好。

2.1.1 TensorFlow入门

现在让我们通过代码示例了解TensorFlow框架中的一些基本组件,让我们编写一个示例来执行以下计算,这对于神经网络非常常见:

 image.png

这里W和x是矩阵,b是向量。然后,*表示点积。sigmoid是一个非线性变换,由以下公式给出:

 image.png

我们将逐步骤讨论如何通过TensorFlow进行此计算。

首先,我们需要导入TensorFlow和NumPy。在Python中运行与TensorFlow或NumPy相关的任何类型的操作之前,必须先导入它们:

 image.png

接下来,我们将定义一个图对象,稍后我们将在这个对象上定义操作和变量:

 image.png

图形对象包括计算图,计算图可以连接我们在程序中定义的各种输入和输出,以获得最终的所需输出(即它定义了如何根据图连接W,x和b来生成h)。例如,如果你将输出视为蛋糕,那么图就是使用各种成分(即输入)制作蛋糕的配方。此外,我们将定义一个会话对象,该对象将定义的图作为输入,以执行图。我们将在下一节详细讨论这些元素。

你可以用以下方式创建新的图对象,就像我们在上一个的例子里一样:

 image.png

或者你可以用以下方式获取TensorFlow的默认计算图:

 image.png

这两种方式都会在练习中使用。

现在我们定义一些张量,即x、W、b和h。张量在TensorFlow中基本上是n维数组。例如,一维向量或二维矩阵称为张量。在TensorFlow中有几种不同的方法可以定义张量,在这里,我们会讨论三种不同的方法:

1.首先,x是占位符。顾名思义,占位符没有初始化值,我们将在图执行时临时提供值。

2.接下来,我们有变量W和b。变量是可变的,这意味着它们的值可以随时间变化。

3.最后,我们有h,这是一个通过对x、W和b执行一些操作而产生的不可变张量:

 image.png

另外,请注意,对于W和b,我们提供了一些重要的参数,如下所示:

 image.png

它们称为变量初始化器,是最初赋值给W和b变量的张量。变量不能像占位符一样在没有初始值的情况下传递,并且我们需要一直为变量指定一些值。这里,tf.random_uniform意味着我们在minval(-0.1)和maxval(0.1)之间均匀地采样,以便将采样值赋给张量,而tf.zeros则用零初始化张量。在定义张量时,定义张量的形状也非常重要,shape属性定义张量的每个维度的大小。例如,如果形状是[10, 5],则意味着它将是一个二维结构,在第0维上有10个元素,在1维上有5个元素。

接下来,我们将运行初始化操作,初始化图中的变量W和b:

 image.png

现在,我们执行该图,以获得我们需要的最终输出h。这是通过运行session.run(…)来完成的,我们提供占位符的值作为session.run()命令的参数:

 image.png

最后,我们关闭会话,释放会话对象占用的资源:

 image.png

下面是这个TensorFlow例子的完整代码。本章所有的示例代码都可以在ch2文件夹下的tensorf?low_introduction.ipynb中找到。

 image.png

image.png

当你执行这段代码的时候,可能会遇到下面这样的警告:

 image.png

不用担心这个,这个警告说你使用了现成的TensorFlow预编译版本,而没有在你的计算机上编译它,这完全没问题。如果你在计算机上进行编译,会获得稍微好一点的性能,因为TensorFlow将针对特定硬件进行优化。

在后面的几节中,我们将解释TensorFlow如何执行此代码,以生成最终输出。另请注意,接下来的两节可能有些复杂和偏技术。但是,即使你没有完全理解所有内容,也不必担心,因为在此之后,我们将通过一个完全是现实世界中的例子来进一步说明。我们会用在我们自己的餐厅Café Le TensorFlow里订单是如何完成的,来解释之前的相同执行过程。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。