3.12 总结
在本章中,我们通过一些示例对算法的主要底层平台(TensorFlow)有了大体上的认知,从而迈出了解决NLP任务的第一步。
首先,我们讨论了TensorFlow的概念、主要特征及其安装情况。谷歌推出的TensorFlow是一个采用数据流图、用于数值计算的开源软件库。它有一些主要特征,例如自动求微分、多语言支持、高度的灵活性、可移植性、性能最优化等。对于TensorFlow的安装,我们重点介绍了Linux下的安装情况。
其次,我们对于TensorFlow的三个主要组成部分(计算图、张量和会话)进行了详细解读。概括起来讲,我们可以用张量表示数据,用计算图搭建神经网络,用会话执行计算图,再优化计算图中线上的权重值(参数)后得到模型。
然后,我们对于TensorFlow的工作原理进行了深度解读,了解到TensorFlow是一个“client—master—worker”分布式的架构系统。
客户端借助于会话界面可以和master进行交互,把将要触发执行的请求发送给master,而master则会把全部要执行的任务分配给单个或多个worker,对应的结果通过master再返回给客户端。作为专注于执行计算的worker,任何一个worker进程都在管理并使用着整个计算硬件资源,进而采取最优的工作方式来计算子图。
下面我们通过一个sigmoid示例对TensorFlow进行更深一层的解读,并且在后面结合该示例对TensorFlow的客户端做了专门的深度解读。
接下来,我们详细讨论了构成一个典型TensorFlow客户端的常见元素:输入、变量、输出和运算(或操作)。输入是我们提供给算法的数据,目的是用于模型的训练和测试。我们讨论了三种不同的输入方式:使用占位符、预加载数据并将数据存储为TensorFlow张量以及使用输入管道。然后我们讨论了TensorFlow变量,它们与其他张量的区别,以及如何创建和初始化变量。之后,我们讨论了如何使用变量来创建中间和最终的输出。最后,我们讨论了几个可用的TensorFlow运算或操作,例如数学运算、矩阵运算、神经网络相关的运算和控制流的操作,这些运算和操作将在本书后面使用。在对这些常见元素解读的过程中,我们逐步分析并结合代码加以实现,力求让每一位读者都能够更直观地理解其内在逻辑和实现机制。
我们还讨论了在实现TensorFlow客户端时如何使用变量作用域来避免某些缺陷。作用域允许我们轻松使用变量,同时也能保持代码的封装性。
最后,我们使用之前学习的所有概念实现了一个神经网络,我们使用三层神经网络对MNIST数字数据集进行分类。
下一章,我们将正式开始讲解NLP领域的重要模型:词嵌入(Word Embedding)。