TensorFlow神经网络到深度学习
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 TensorFlow介绍

TensorFlow可被用于语音识别或图像识别等多项机器深度学习领域,对2011年开发的深度学习基础架构DisBelief进行了各方面的改进,它可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行。TensorFlow将完全开源,任何人都可以使用。

1.1.1 TensorFlow特性

目前,为什么TensorFlow在DNN研究人员和工程师中如此受欢迎?这与其自身特性息息相关,主要表现在以下几个方面。

1.高度的灵活性

TensorFlow不是一个严格的“神经网络”库,只要可以将计算表示为一个数据流图,就可以使用TensorFlow来构建图,描写驱动计算的内部循环。我们提供了有用的工具来帮助用户组装“子图”(常用于神经网络),当然用户也可以自己在TensorFlow基础上编写自己的“上层库”。定义好用的新复合操作和写一个Python函数一样容易,而且也不用担心性能损耗。当然,万一用户发现找不到想要的底层数据操作,也可以自己写一点C++代码来丰富底层的操作。

2.真正的可移植性

TensorFlow在CPU和GPU上运行,如可以运行在台式机、服务器、手机移动设备上等。想要在没有特殊硬件的前提下,在用户的电脑上运行一下机器学习,TensorFlow可以办到这点。准备将用户的训练模型在多个CPU上规模化运算,又不想修改代码,TensorFlow可以办到这点。想要将用户的训练模型作为产品的一部分运行到手机App里,TensorFlow可以办到这点。想要将用户的模型作为云端服务运行在自己的服务器上,或者运行在Docker容器里,TensorFlow也能办到。

3.将科研和产品联系在一起

过去如果要将科研中的机器学习想法用到产品中,则需要大量的代码重写工作。在Google,科学家用TensorFlow尝试新的算法,产品团队则用TensorFlow来训练和使用计算模型,并直接提供给在线用户。使用TensorFlow可以让应用型研究者将想法迅速运用到产品中,也可以让学术性研究者更直接地彼此分享代码,从而提高科研产出率。

4.自动求微分

基于梯度的机器学习算法会受益于TensorFlow自动求微分的能力。作为TensorFlow用户,只需要定义预测模型的结构,将这个结构和目标函数结合在一起,并添加数据,TensorFlow将自动为用户计算相关的微分导数。计算某个变量相对于其他变量的导数仅仅是通过扩展用户的图来完成的,所以用户能一直清楚看到究竟在发生什么。

5.多语言支持

TensorFlow有一个合理的C++使用界面,也有一个易用的Python使用界面来构建和执行用户的Graphs。用户可以直接写Python/C++程序,也可以利用IPython交互式界面实现TensorFlow,它可以帮用户将笔记、代码、可视化等有条理地归置好。当然这仅仅是个起点——TensorFlow希望能鼓励用户创造自己最喜欢的语言界面,如Go、Java、Lua、JavaScript或者R。

6.性能最优化

例如,用户有一个拥有32个CPU内核、4个GPU显卡的工作站,想要将用户工作站的计算潜能全部发挥出来,由于TensorFlow 给予了线程、队列、异步操作等以最佳的支持,TensorFlow 让用户可以将硬件的计算潜能全部发挥出来。用户可以自由地将TensorFlow图中的计算元素分配到不同设备上,TensorFlow可以帮助用户管理好这些不同副本。

1.1.2 谁可以使用TensorFlow

任何人都可以使用TensorFlow,如学生、研究员、爱好者、极客、工程师、开发者、发明家、创业者等都可以在Apache 2.0开源协议下使用TensorFlow。

TensorFlow还没竣工,它需要被进一步扩展和上层建构。Google发布了源代码的最初版本,并且将持续完善它。Google希望大家通过直接向源代码贡献或者提供反馈,来建立一个活跃的开源社区,以推动这个代码库的未来发展。

1.1.3 为什么Google要开源这个神器

如果TensorFlow这么好,为什么不藏起来而要开源呢?答案或许比想象中简单:Google认为机器学习是未来新产品和新技术的一个关键部分。在这个领域的研究是全球性的,并且发展很快,却缺少一个标准化的工具。通过分享这个Google认为是世界上最好的机器学习工具库之一的工具,Google希望能够创造一个开放的标准,来促进交流研究想法和将机器学习算法产品化。Google的工程师们确实用它来提供用户直接用到的产品和服务,而Google的研究团队也将在他们的许多科研文章中分享他们对TensorFlow的使用。

本节的目的是让用户了解和运行TensorFlow。在开始之前,让我们先看一段使用 Python API写的TensorFlow示例代码,让用户对将要学习的内容有初步的印象。

以下代码用Python程序生成了一些三维数据,然后用一个平面拟合它:

运行程序,输出如下: