我爱编程Python和TensorFlow学习书籍

深入浅出TensorFlow(六)TensorFlow高层封装

2017-11-03  本文已影响393人  AI前线

作者 | 郑泽宇

AI前线出品| ID:ai-front

在前面的几篇文章已经介绍了如何使用原生态TensorFlow API来实现各种不同的神经网络结构。虽然原生态的TensorFlow API可以很灵活的支持不同的神经网络结构,但是其代码相对比较冗长,写起来比较麻烦。为了让TensorFlow用起来更加方便,可以使用一些TensorFlow的高层封装。

目前对TensorFlow的主要封装有4个:

第一个是TensorFlow-Slim;

第二个是tf.contrib.learn(之前也被称为skflow);

第三个是TFLearn;

最后一个是Keras。

本文将大致介绍这几种不同的高层封装的使用方法,并通过其中常用的三种方式在MNIST数据集上实现卷积神经网络。

TensorFlow-Slim

TensorFlow-Slim是一个相对轻量级的TensorFlow高层封装。通过TensorFlow-Slim,定义网络结构的代码可以得到很大程度的简化,使得整个代码更加可读。下面的代码对比了使用原生态TensorFlow实现卷积层和使用TensorFlow-Slim实现卷积层的代码:


从上面的代码可以看出,使用TensorFlow-Slim可以大幅减少代码量。省去很多与网络结构无关的变量声明的代码。虽然TensorFlow-Slim可以起到简化代码的作用,但是在实际应用中,使用TensorFlow-Slim定义网络结构的情况相对较少,因为它既不如原生态TensorFlow的灵活,也不如下面将要介绍的其他高层封装简洁。但除了简化定义神经网络结构的代码量,使用TensorFlow-Slim的一个最大好处就是它直接实现了一些经典的卷积神经网络,并且Google提供了这些神经网络在ImageNet上训练好的模型。下表总结了通过TensorFlow-Slim可以直接实现的神经网络模型:



Google提供的训练好的模型可以在github上tensorflow/models/slim目录下找到。在该目录下也提供了迁移学习的案例和代码。

tf.contrib.learn

tf.contrib.learn是TensorFlow官方提供的另外一个对TensorFlow的高层封装,通过这个封装,用户可以和使用sklearn类似的方法使用TensorFlow。通过tf.contrib.learn训练模型时,需要使用一个Estimator对象。Estimator对象是tf.contrib.learn 进行模型训练(train/fit)和模型评估(evaluation)的入口。

tf.contrib.learn模型提供了一些预定义的 Estimator,例如线性回归(tf.contrib.learn.LinearRegressor)、逻辑回归(tf.contrib.learn.LogisticRegressor)、线性分类(tf.contrib.learn.LinearClassifier)以及一些完全由全连接层构成的深度神经网络回归或者分类模型(tf.contrib.learn.DNNClassifier、tf.contrib.learn.DNNRegressor)。

除了可以使用预先定义好的模型,tf.contrib.learn也支持自定义模型,下面的代码给出了使用tf.contrib.learn在MNIST数据集上实现卷积神经网络的过程。更多关于tf.contrib.learn的介绍可以参考Google官方文档。

https://www.tensorflow.org/get_started/tflearn



TFLearn

TensorFlow的另外一个高层封装TFLearn进一步简化了tf.contrib.learn中对模型定义的方法,并提供了一些更加简洁的方法来定义神经网络的结构。和上面两个高层封装不一样,使用TFLearn需要单独安装,安装的方法为:

pip install tflearn

下面的代码介绍了如何通过TFLearn来实现卷积神经网络。更多关于TFLearn的用法介绍可以参考TFLearn的官方网站(http://tflearn.org/


运行上面的代码,可以得到类似如下的输出:


Keras

Keras是一个基于TensorFlow或者Theano的高层API,在安装好TensorFlow之后可以通过以下命令可以安装:

下面的代码介绍了如何通过Keras来实现卷积神经网络。更多关于Keras的用法介绍可以参考Keras的官方网站(http://tflearn.org/



运行上面的代码,可以得到类似如下的输出:


作者介绍

郑泽宇,才云首席大数据科学家,前谷歌高级工程师。从 2013 年加入谷歌至今,郑泽宇作为主要技术人员参与并领导了多个大数据项目,拥有丰富机器学习、数据挖掘工业界及科研项目经验。2014 年,他提出产品聚类项目用于衔接谷歌购物和谷歌知识图谱(Knowledge Graph)数据,使得知识卡片形式的广告逐步取代传统的产品列表广告,开启了谷歌购物广告在搜索页面投递的新纪元。他于2013 年 5 月获得美国 Carnegie Mellon University(CMU)大学计算机硕士学位, 期间在顶级国际学术会议上发表数篇学术论文,并获得西贝尔奖学金。


-全文完-

关注人工智能的落地实践,与企业一起探寻 AI 的边界,AICon 全球人工智能技术大会火热售票中,8 折倒计时一周抢票,详情点击:

http://t.cn/Rl2MGtT

《深入浅出TensorFlow》迷你书现已发布,关注公众号“AI前线”,ID:ai-front,回复关键字:TF,获取下载链接!


上一篇下一篇

猜你喜欢

热点阅读