一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
。