TensorFlow学习:一个用于人工智能的开源神器

一、TensorFlow的介绍

TensorFlow是一个采用数据流图,用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow最初由Google大脑小组的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可以广泛应用于其他计算领域。

上图就是一个数据流图的展示,数据流图用“结点”(nodes)和“线”(edges)的有向图来描述数学计算。“节点”一般用来表示施加的数学操作,但也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”(tensor)。张量从图中流过的直观图像处理是这个工具取名为“TensorFlow”的原因,一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行地执行运算。

二、TensorFlow的特征

1. 高度的灵活性

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

2. 真正的可移植性

TensorFlow在CPU和GPU上运行,比如说可以运行在台式机、服务器、手机移动设备等等。我们可以在笔记本上跑我们的TensorFlow代码,可以不修改代码的前体现,准备将你的训练模型在多个CPU上规模化运算,也可以将训练好的模型作为产品的一部分用到手机app里。也可以将模型作为云端服务运行在自己的服务器上,或者docker容器里。

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

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

4. 自动求微分

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

5. 多语言支持

TensorFlow有一个合理的C++使用界面,也有一个易用的Python使用界面来构建和执行你的graphs。你可以直接写Python/c++程序,也可以用交互式的ipython界面来用TensorFlow尝试些想法,它尅帮你写笔记、代码、可视化等有条理地归置好。当然这仅仅是个起点--我们希望能鼓励你创造自己最喜欢的语言界面,如go、java、lua、JavaScript、r。

6. 性能最优化

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



任何人都可以使用TensorFlow,TensorFlow还没有竣工,需要进一步扩展和上层建构,Google开源了这个学习库,是希望更多人可以使用它,并且促进TensorFlow的进化。

文章内容来源于TensorFlow中文社区,链接:TensorFlow中文社区