大部分内容翻译自斯坦福大学CS20课程,有兴趣的童鞋可以阅读:http://web.stanford.edu/class/cs20si/syllabus.html
TensorFlow是由Google公司开发的用于实现机器学习的一种架构。在TensorFlow的官网上写着如下的一段话:"TensorFlow™ is an open source software library for numerical computation using data flow graphs."
现在我们看到和使用的TensorFlow是Google在github上上传的开源版本,但是在Google公司内部,有一个自己用的版本。这不是因为Google想把好的东西据为己有,而是由于TensorFlow与Google内部的工具有着复杂的联系。所以,一般意义上,我们所谈到的TensorFlow均是指我们在github上使用的开源版本。
关于TensorFlow的另外一个关键的属性是它是一个“机器智能软件库”。在过去的一年中,几乎每个星期都会有一家公司发布属于自己的深度学习库。如果你想查看当前已有的深度学习库(不完全),请点击:深度学习库
于是,在那么多深度学习和机器学习的框架下,为什么我们要学习TensorFlow呢?其中一个很重要的原因是TensorFlow可以有效满足生产和科研的需要。对于生产来讲,我们希望框架更加高效,扩展性强并且可维护。而对于研究人员,我们则希望我们使用的机器学习框架拥有更加灵活的操作。现在市面上用于替代TensorFlow的框架,要么十分灵活但扩展性较差如Chainer和PyTorch,要么可扩展性强但不太灵活,如Caffe和MXNet。而TensorFlow具备了上述的所有优点,它既灵活又有较好的扩展性,既适合用于生产也适合用于科研工作。
正是因为TensorFlow这种独一无二的特性,这一独特的地位使TensorFlow得以迅速发展。 它目前已经被Google,OpenAI,NVIDIA,Intel,SAP,eBay,Airbus,Uber,Airbnb,Snap,Dropbox和初创公司等大公司所使用。截止到2018年1月11日,在Github上,TensorFlow已经拥有了超过85.4k的Star以及25.3k的相关的存储库,是其余框架的两倍还多。
总而言之,我们选择使用TensorFlow是由于:
- Python API
- 可移植性:仅仅使用一个API就可以将计算任务部署到服务器或者PC的CPU或者GPU上
- 灵活性:适用于诸如Linux,Cent OS,Windows等操作系统
- 可视化(TensorBoard是一个黑科技)
- 支持存储和恢复模型与图
- 拥有庞大的社区支持
- 现在很多有用的工作都是基于TensorFlow
基于TensorFlow的高级API
现如今,已经出现了很多基于TensorFlow的高级API,诸如Keras,TFlearn以及Sonnet等等。这些API提供了强大的功能使你可以在短短的几行代码中调用复杂的神经网络模型。如果有兴趣的童鞋可以私下里了解一下。
但是,TensorFlow的主要目的不是为了提供可以直接调用的机器学习的解决方案。相反,TensorFlow提供了广泛的函数和类,允许用户可以从头开始定义自己的模型。这为TensorFlow的用于提供了更好的灵活性。通过TensorFlow你几乎可以实现你想要实现的任何框架模型。
TensorFlow基础
首先我们需要知道的关于TensorFlow的第一件事就是它的计算图(computation graph approach)方法。任何一个TensorFlow程序都是由两个阶段组成:
第一阶段,需要用户去构建一个图。
第二阶段,需要在一个会话(session)中执行图的操作。
这种操作模式在将来可能会被改变,详情可以参看:https://research.googleblog.com/2017/10/eager-execution-imperative-define-by.html
关于图的更多细节,可以查阅PPTCS20PPT_01
相关连接: