模型介绍
1 核心概念
TensorFlow中的计算可以表示为一个有向图(directed graph),或称计算图(computation graph),其中每一个运算操作(operation)将作为一个节点(node),节点与节点之间的连接称为边(edge)。
计算图中每一个节点可以有任意多个输入和任意多个输出,每一个节点描述了一种运算操作,节点可以算是运算操作的实例化(instance)。
在计算图的边中流动(flow)的数据被称为张量(tensor),故得名TensorFlow。有一类特殊的边没有数据流动,这种边是依赖控制(control dependencies),作用是让它的起始节点执行完之后再执行目标节点。
tensor的数据类型,可以是事先定义的,也可以根据计算图中的结构推断得到。
TensorFlow的內建运算操作
标量运算:Add,Sub,Mul,Div,Exp,Log,Greater,Less,Equal
向量运算:Concat,Slice,Split,Constant,Rank,Shape,Shuffle
矩阵运算:MatMul,MatrixInverse,MatrixDeterminant
带状态的运算:Variable,Assign,AssignAdd
神经网络组件:SoftMax,Sigmoid,ReLU,Convolution2D,MaxPooling
储存、恢复:Save,Restore
队列及同步运算:Enqueue,Dequeue,MutexAcquire,MutexRelease
控制流:Merge,Switch,Enter,Leave,NextIteration
Session是用户使用TensorFlow的交互式接口。用户可以Session的Extend方法添加新的节点和边,用以创建计算图,可以通过Session的Run方法执行计算图。对绝大数用户,只会创建一次计算图,然后反复地执行整个计算图或是其中一部分子图(sub-graph)
大多数计算中,计算图会被反复执行多次,而数据也就是tensor并不会被持续保留,只是在计算图过一遍。Variable是一类特殊的运算操作,它可以将一些需要保留的tensor储存在内存或显存中,比如神经网络模型中的系数。每一次执行计算图,Variable中的数据tensor将会被保存,同时在计算过程中这些tensor也会被更新,比如神经网络每一次mini-batch训练时,神经网络的系数将会被更新并保存。使用Variable,可以在计算图中实现一些特殊操作,比如Assign,AssignAdd(+=),AssignMul(-=)。
2 实现原理
TensorFlow有一个重要的组件client(客户端),它通过Session的接口与master及多个worker相连。
每个worker可与多个硬件设备相连,如CPU、GPU,并管理硬件。
master负责指导所有worker按流程执行计算图。
TensorFlow有两种模式:
(1)单机模式:client,master,worker在一台机器上的同一个进程中
(2)分布式模式:client,master,worker在不同机器的不同进程中,由集群调度