Tensorflow介绍以及与其他框架的对比

一Tensorflow基础

   (1)Tensorflow前端支持C++,Python, Go, Java,后端使用C++,Cuda

     (2) 适合进行工业化应用,拓展到分布式集羣。

  (3)Tensorflow中的client(客户端),通过Session与 master和多个 worker相连。

       单机版:client->master->控制多个worker, 在同一个机器上 //job:localhost/device:cpu:0

       分布式模式: client->master->worker在多台机器上. /job:worker/task:17/device:gpu:3

    (4)Tensorflow中的数据通信:节点分配策略,子图划分:使用同一个设备并且相邻的节点会被划分到同一个子图。可以显示定义使用哪个设备

     .  with tf.device(“/gpu:%d” % d):

    (5)Tensorflow的自动求导:正向传播时,确定了执行顺序,tensor产生后迅速被后续节点使用。不会持续占用内存。但在反向传播时,经常需要用到计算图开头的Tensor, 这些tensor会占用大量GPU显存,限制了模型的规模。

   (6)Tensorflow支持单独执行子图: feed/fetch,定义输入输出

            Tensorflow支持计算图的控制流: if-condition和while-loop, 提供switch和merge operator

     (7) Tf中的任务调度符合队列,当一个batch的数据运算时,提前从磁盘中读取下一个batch的数据, 减少磁盘的I/O堵塞时间。

          Tf中的Variable对象存储在容器中。

     (8)TF支持BLAS和cuBLAS, cuda-convnet, cuDNN

     (9)TF三种加速训练的并行计算方式:(1)数据并行,模型并行,流水线并行

二Tensorflow跟其他框架的对比

   (1)目前支持原生的分布式的框架:tf, mxnet, deeplearning4j, CNTK

     (2) Theano:偏学术研究,单GPU上好,CPU上差,模型倒入和编译慢。CUDA上不支持多GPU训练,在浅网络比 tf好,因为全部代码在运行时编译,不用像tf那样每次feed mini_batch数据要用python循环实现

  (3)Torch:基于LuaJIT, 底层是C。易定义新layer,比tf和theano易于实现复杂功能比如beam search

    (4) kersas:基于tf和theano, 比torch好,支持多模块自由组合。

   (5)Mxnet:上层的计算图优化算法让符号计算执行的非常快,能够用在 FPGA,移动设备上,构建ios.比keras,torch这些高度封装的框架长,但是比theano慢。

    (6)DIGITS:caffe的高级封装,有空试试。

     (7) 其他: CNTK(微软亚研提出),Deeplearing4J(企业服务,易于与java分布式系统结合),

      (8)Chainer, Leaf, DSSTNE

 。

   

    

点赞