Tensorflow是一个Google开发,基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现。
TensorFlow简介
顾名思义,TensorFlow就是以张量(Tensor)在计算图(Graph)上流动(Flow)的方式的实现和执行机器学习算法的框架。它具有以下特点:
灵活性。TensorFlow 不是一个严格的“神经网络”库(实际上TF的官方定位是 基于数据流图的科学计算库,而不仅仅是机器学习库)。只要可以将计算表示成数据流图,就可以使用TensorFlow,比如科学计算中的偏微分求解等。
可移植性。同一份代码几乎不经过修改既可以部署到有任意数量CPU、GPU或TPU(Tensor Processing Unit,Google专门为机器学习开发的处理器)的PC、服务器或移动设备上。
自动求微分。同Theano一样,TensorFlow也支持自动求微分,用户不需要再通过反向传播求解梯度。
多语言支持。TensorFlow官方支持Python、C++、Go和Java接口,用户可以在硬件配置较好的机器中用Python进行实验,在资源较紧张或需要低延迟的环境中用C++进行部署。
性能。虽然TensorFlow最开始发布时仅支持单机,在性能评测上并不出色,但是凭借Google强大的开发实力,TensorFlow性能已经追上了其他框架。
TensorFlow架构
TF的系统构架分为两部分:

前端:提供编程模型,负责构造计算图,提供Python,C++,Java,Go等多种语言支持。
后端:提供运行时环境,负责执行计算图,采用C++实现。
用户在搭建算法时,可以根据个人喜好和实际需求采用合适的前端语言来构建计算图。图搭建完成后,以Session为桥梁连接TF的后端,启动并执行图的计算过程。TF的后端根据当前硬件环境调用Operation的Kernal(Operation在某种硬件设备的特定实现)完成具体的计算。
TensorFlow编程模式
符号式编程 vs 命令式编程
和我们一般常用的命令式(Imperative)编程模式不同,TF采用的是符号式(Symbolic)编程。我们先认识一下两种编程模式:
命令式编程
是很常见的编程模式,大多数Python或C++程序都采用命令式编程。命令式编程 明确输入变量,根据程序逻辑逐步运算。下面是一段命令式编程的Python代码:
import numpy as np
a = np.ones(10)
b = np.ones(10) * 2
c = b * a
d = c + 1
执行完第一步a = np.ones(10)后,程序得到了输入变量a,第二句后得到了b,当执行c = b * a时,程序通过乘法计算而得到了c。
符号式编程
则 将计算过程抽象为计算图**,**即将所有输入节点、运算节点和输出节点(计算图的三个主体)均符号化处理。将上述命令式编程代码转换为符号式编程:
A = Variable('A')
B = Variable('B')
C = B * A
D = C + Constant(1)
# compiles the function
f = compile(D)
d = f(A=np.ones(10), B=np.ones


2271

被折叠的 条评论
为什么被折叠?



