您的位置:首页 > 编程语言

如何高效的学习 TensorFlow 代码?

2017-03-29 14:43 369 查看
转自:https://www.zhihu.com/question/41667903/answer/123150582

目前TensorFlow代码已超过40w行,从代码量上来看,绝不是一个能够迅速上手的小项目。所以,想要精通TensorFlow的同学需要做好心理准备。



对于想要学习TensorFlow(以下简称TF)的人,根据目的不同,可以简单分为以下2类:1. 研究学者,仅仅需要TF这个平台实现深度学习算法,无需了解太多底层原理2. 好学的行业内人员(比如我⊙﹏⊙),不仅需要了解算法模型,同时还要熟悉TF平台的原理。在算子、通信、模型优化等方面进行平台的二次开发的人。研究学者: 你们可以考虑使用Keras,python写的深度神经网络库,已经实现了绝大部分神经网络,如:RNN、GRU、LSTM,CNN,Pooling,Full-Connected,以及sigmoid、tanh、Relu、PRelu、SRelu等各种激活函数。并且采用TF/Theano作为后端计算引擎,自己本身拥有一套更高层的API,可以同时跑在TF/Theano平台上。 相对于TF来说,这个学习压力小了很多,我们公司负责算法的同事也是用Keras来写模型,然后我再用TF的API来实现分布式部署。附:

开发人员: 对于我们这类人来说,首先需要弄清平台的很多名称、概念、定义, @贾扬清 曾说过TF有太多的Abstraction需要学习。诚然,这加大了我们的学习难度。但是,这也说明Google是想要把这个平台做大做强的,所以才会花时间去设计这一套框架和统一的结构。特别是读了部分源码后,更有这种感触。 那么,具体要怎么开始呢? 极客学院有翻译部分TF的官方文档,对于初步了解Tensor、DAG、Operator、Variable、Device、Optimizer等是帮助的。在看完这些概念后,有一个MNIST的例子程序作为TF的入门。这个样例用一个简单的Softmax实现了手写体数字识别的神经网络,只有一层参数。同时还介绍了Session、tf.placeholder、图的计算等重要概念。 在看完这个样例后,如果理解了DAG和Session,可以继续看用卷积神经网络实现的MNIST,准确率上升到了99%,相对于单层Softmax的92%左右,已经接近目前最高的准确率了。

TF v0.8发布了分布式模型,我也研究了将近1个月,才把Seq2seq机器翻译改造成了分布式,但是现在公司不让发布出来ORZ。好消息是,我改写了社区的MNIST分布式程序,并且已经合并到master分支了。所以,如果想要继续学习分布式的话,我建议可以看一下那份代码。比较遗憾的是,极客学院目前没有翻译分布式的教程,所以大家得移步TF官网(貌似被墙了)。 由于分布式的资料较少,我这里简单梳理下概念,大家在官网会看到他们的定义: TF采用了PS/Worker的结构来定义集群,其中 PS(parameter server):存储variable(模型参数),主要负责参数更新和发放; Worker:存储operator,主要负责图计算和梯度计算(TF使用Optimizer实现了自动化的梯度计算); job:由于工作类型不同,用job_name来区分ps和worker task:对于每个worker来说,具体做什么任务(算什么图)也有可能不同,用task_index区分 device:指具体的CPU/GPU,通常PS绑定到CPU上,Worker绑定到GPU上,各取所长。 syncReplicaOptimizer:同步优化器,其本质仍然是用普通优化器进行梯度计算,但是通过Queue机制和Coordinator多线程协同实现了所有worker的梯度汇总和平均,最终将梯度传回PS进行参数更新。 以上几个概念对于分布式的理解非常重要。当然,想要完全弄懂,还得不断的看文档和源码。源码我推荐几个python目录下非常值得看的基础类定义: framework/Ops.py:定义了Tensor、Graph、Opreator类等 Ops/Variables.py:定义了Variable类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: