TensorFlow 学习(1)

Google 终于在今天开源了 TensorFlow (TF)这个号称终极 ML 神器,Jeff Dean 背书的 infra structure 怕是又会一场腥风血雨,与 Spark 系少不了一场争执。好在开源之后也可以开始公开一些这方面的体验。当然大公司的开源都是心中有鬼的,需要在各自营地耕耘的兄弟自己掂量一下 🙂

粗粗看了一下 TF 的代码,先来点准备工作。

protobuf v3

大部分公司里面的 project 还是 v2 用的比较多,之前的 blog 也有所讨论,下面是一些 v3 与 v2 的主要区别:

  • 不再有 required/optional 的区别,默认就是 optional,当然 repeated 还是要保留;据说去掉 required 是为了避免 optional 到 required 的 migration 这种情况下出现的问题
  • 通过 reserved 可以保留一些 field 的编号或者名字,这对 deprecation、提前 book 一些东西是有帮助的
  • 使用 Any 而不再使用 extension
  • 支持 JSON 的 mapping

之前讨论过 polymorphism 和 extension 的关系,通过 Any 这里不再需要 extension 那种比较诡异的用法了。proto2 里面引入的 oneof 和 map 仍然可以用。当然同时还发现 google 还开源了 gRPC,有空也要看看。

基本概念

TF 里面基本的概念其实和学习编译器原理的 parser 类似:

  • 每个节点表示或者是某种计算操作(如加法、乘法)或者某种数据获得的过程(如 IO 或者一些 utility function 用来直接生成 tensor)
  • 每条边表示节点之间的计算因果关系

这样一来计算的过程可以用所谓的 data flow graph 表达出来(是不是觉得和 parser 生成的 AST 一个意思呢?),这样一来一些 ML 的模型(loss function)就可以用 TF 表达出来,而 TF 本身并不提供诸如神经网络的实现,在 TF 之上我们可以提供这些不同模型的抽象,而他们的计算模型就被 TF 封装了起来,TF 提供了 auto-differentiation 能力,因此一旦 loss function 被描述了出来,TF 就能使用一些通用的 solver 如 SGD 完成优化。同时 TF 实现了不同 CPU/GPU 构架下的基本操作,这样高层的抽象可以在不同的物理平台上执行。

TF 提供了 python 和 C++ 的 API,说实在的这本质上就是提供了一类设计的很差的 DSL,从某种意义上来看,不明白为什么不干脆实现另外一种语言(跟 Matlab 类似),然后使用编译器的技术将执行计算的程序根据不同的目标编译出来,这样语言的 extension 就可以解决扩展性了吧。

下面我们看一些具体的例子。

——————
Yet did not the chief butler remember Joseph, but forgat him

Advertisements
TensorFlow 学习(1)

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s