在介绍Tensorflow之前,我们先看一下 机器学习VS 深度学习在算法上有何区别。
机器学习算法的分类有两个阶段:
训练阶段:在这个阶段,机器学习算法使用由图像及相应标签组成的数据集。
预测阶段:在这个阶段,一般利用训练模型来预测图像标签。
图像分类问题的训练阶段主要有两个步骤:
特征提取:在这个阶段,我们利用领域知识来提取一些由机器学习算法使用的新特征。 HoG和SIFT就是两个示例。
模型训练:在这个阶段,我们利用由图像特征和相应的标签组成的净数据集来训练机器学习模型。
在预测阶段,我们对新图像应用相同的特征提取过程,并将特征传递给机器学习算法以用来预测标签。
传统机器学习和深度学习算法的主要区别在于特征(feature)。 在传统的机器学习算法中,我们需要手工编码特征。 相比之下,在深度学习算法中,特征由算法自动完成。 这个过程不太容易,而且耗时,很需要专业领域的相关知识。 与具有较少或没有特征工程的传统机器学习相比,深度学习目标是更准确做到机器学习算法。
下面我们初步认识一下深度学习八大开源算法框架之一的:
Google创建了TensorFlow (TF)来取代Theano。这两个事实上是非常相似的。 Theano的一些创作者,如Ian Goodfellow,在离开OpenAI之前,在Google上创建了Tensorflow。
目前,TensorFlow不支持所谓的“内联”矩阵操作,但强制复制矩阵以便对其执行操作。但是无论从哪个角度看,复制大矩阵的成本都是很高的。 TF所需是深度学习工具的4倍。 这也是Google正在处理的问题。
像大多数深层学习框架一样,TensorFlow是通过C / C ++引擎使用Python API编写的,使其运行速度快。但它不是Java和Scala的解决方案。
TensorFlow不仅仅是深度学习。 它实际上还有工具可以来支持强化学习和其他algos。
谷歌公认的Tensorflow的目标似乎是招聘,共享他们研究人员的代码,标准化软件工程师如何深入学习的过程,并创建一个额外的图表到谷歌云服务,以此优化TensorFlow。
Google并不支持TensorFlow商业化,并且Google也不太可能支持开源企业软件的业务。
像Theano一样,TensforFlow生成计算图(例如,一系列矩阵运算,例如z = sigmoid(x),其中x和z是矩阵)并会自动分化。自动分化是很重要的,因为在每次尝试新的神经网络安排时,你不想手动编码一个新的反向传播的变体。在Google的生态系统中,Google Brain使用的计算图表非常繁琐,但Google尚未开放这些工具。 TensorFlow是Google内部深度学习的一半解决方案。
从企业的角度来看,一些公司需要回答的问题是他们是否想依赖Google来获取这些工具。
注意:在Tensorflow中不是所有的操作像在Numpy中一样可行。
TensorFlow的优点和缺点
(+)Python + Numpy
(+)计算图抽象,如Theano
(+)比Theano更快的编译时间
(+)TensorBoard
(+)数据和模型并行性
( – )比其他框架慢
( – )比火炬“更”更多魔法
( – )没有很多预训练模型
( – )计算图是纯Python,因此很慢
( – )无商业支持
( – )退出到Python加载每个新的训练批处理
( – )不是很方便
( – )动态类型在大型软件项目中容易出错
那TensorFlow还有哪些特点呢?
我们来看一下李尊的总结:
机动性: TensorFlow并不只是一个规则的neural network库,事实上如果你可以将你的计算表示成data flow graph的形式,就可以使用TensorFlow。用户构建graph,写内层循环代码驱动计算,TensorFlow可以帮助装配子图。定义新的操作只需要写一个Python函数,如果缺少底层的数据操作,需要写一些C++代码定义操作。
可适性强: 可以应用在不同设备上,cpus,gpu,移动设备,云平台等
自动差分: TensorFlow的自动差分能力对很多基于Graph的机器学习算法有益
多种编程语言可选: TensorFlow很容易使用,有python接口和C++接口。其他语言可以使用SWIG工具使用接口。(SWIG—Simplified Wrapper and Interface Generator, 是一个非常优秀的开源工具,支持将 C/C++ 代码与任何主流脚本语言相集成。)
最优化表现: 充分利用硬件资源,TensorFlow可以将graph的不同计算单元分配到不同设备执行,使用TensorFlow处理副本。