背景知识
目前,机器学习在各行各业应用广泛,特别是计算机视觉、语音识别、语言翻译和健康医疗等领域,出现了很多应用于机器学习的第三方库。其中,Google的TensorFlow引擎提供了一种解决机器学习问题的高效方法。TensorFlow™是一个采用数据流图(Data Flow Graph),用于数值计算的开源软件库。TensorFlow具有灵活的架构,可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU)、服务器、移动设备等等。TensorFlow最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来用于机器学习和深度神经网络方面的研究。鉴于这个系统的通用性,它也可广泛用于其他计算领域。
Tensorflow是一个通过计算图的形式来表述计算的编程系统,计算图也叫数据流图,可以把计算图看做是一种有向图,即用“结点”(node)和“线”(edge)的有向图来描述数学计算。节点在图中表示数学操作,但也可以表示数据输入(feedin)的起点/输出(push out)的终点。图中的线则表示在节点间相互联系的多维数据数组,即张量(tensor),描述了计算之间的依赖关系。张量从图中流过的直观影像是这个工具取名为TensorFlow的原因。当输入端的所有张量准备好,节点即可被分配到各种计算设备完成异步、并行运算。
TensorFlow的基础架构如图所示,具有以下特征:
(1)高度的灵活性:TensorFlow不是一个严格的神经网络库。只要一个计算可以表示为一个数据流图,就可以使用TensorFlow来构建图,描写驱动计算的内部循环。TensorFlow提供了有用的工具来帮助组装“子图”(常用于神经网络),当然用户也可以自己在TensorFlow基础上写自己的“上层库”。如果想改进底层数据操作,也可以自己动手编写C++代码丰富底层的操作。
(2)真正的可移植性:TensorFlow可以在CPU和GPU上运行,也可以运行在台式机、服务器、手机移动设备等。
(3)将科研和产品联系在一起:过去如果要将科研中的机器学习算法应用到产品中,需要大量的代码重写工作。科学家可以用TensorFlow尝试新的算法,产品团队则用TensorFlow来训练和使用计算模型,并直接提供给在线用户。使用TensorFlow可以让应用型研究者将想法迅速运用到产品中,也可以让学术性研究者更直接地彼此分享代码,从而提高科研产出率。
(4)自动求微分:基于梯度的机器学习算法会受益于TensorFlow自动求微分的能力。作为TensorFlow用户,通过定义预测模型的结构,可将结构和目标函数(objective function)结合,并添加数据。TensorFlow会自动计算相关的微分导数。
(5)多语言支持:TensorFlow支持C++和Python,使用者可以直接写Python/C++程序,也可以用交互式的iPython界面,并将笔记、代码、可视化等有条理地归置好。
(6)性能最优化: TensorFlow支持线程、队列、异步操作等,通过自由地将TensorFlow图中的计算元素分配到不同设备上,发挥硬件的计算潜能。同时,TensorFlow可以管理这些不同副本。
TensorFlow还没竣工,它可以被进一步扩展。有致力于相关研发的人都可以直接贡献源代码,或者提供反馈,来建立一个活跃的开源社区,推动代码库的未来发展。
机器学习是未来新产品和新技术的一个关键部分。在这一个领域的研究是全球性的,并且发展很快,却缺少一个标准化的工具,Google就是通过创造一个开放的标准,促进交流研究想法和将机器学习算法产品化。在本项目中,我们将使用Google的TensorFlow来完成神经网络的初步使用。进一步地深入学习与拓展,完成深度学习的开发、应用研究需要读者在应用实战中加强。