TensorFlow编程堆栈

本篇文章简单介绍一下TensorFlow框架的programming stack,读者通过此文将了解不同层次的开发者应该使用哪个层次的编程接口。我们将TensorFlow的API划分为四个层次(见下图),分别是:

  • 高阶API,Estimator
  • 中阶API,Layers、Datasets、Metrics
  • 低阶API,Python、C++、Java、Go等编程语言接口
  • Kernel,TensorFlow的分布式执行引擎
    https://www.tensorflow.org/guide/premade_estimators

对于大部分使用TensorFlow的机器学习/深度学习开发者,只需要调用Layers的API搭建神经网络模型,调用Datasets的API实现数据预处理、批量化等input pipeline,借助Metrics的API定义模型推理结果的指标,最后使用EstimatorsLayers、Datasets、Metrics组合到一起对模型进行训练、评估以及训练过程中的管理等。所以,如果你是一名数据科学家,欲使用TensorFlow建立模型解决具体应用问题,那么使用TensorFlow的中、高阶API是最好的选择。
TensorFlow的中、高阶API参见:

值得注意的是,上述中、高阶API都是在Python编程语言基础上建立的,只能通过Python编程使用这些中、高阶API。(当然,也不排除后续会在其他编程语言上发布API。) 当前,TensorFlow最新版本为1.12.0(2018年11月08日发布),据信在2019年初2.0版本发布后tf.keras.layers会取代现有的tf.layers,那时,tf.keras会成为当之无愧的中、高阶API。(其实,现在的tf.layers中很多方法的实现都调用了tf.keras的接口)

低阶API主要是一些特定的运算(operations)在不同编程语言上的实现,以及通过图、会话等编程概念管理程序的运行。例如二维卷积tf.nn.conv2d()

tf.nn.conv2d(
    input,
    filter,
    strides,
    padding,
    use_cudnn_on_gpu=True,
    data_format='NHWC',
    dilations=[1, 1, 1, 1],
    name=None
)

与中阶API的二维卷积tf.layers.conv2d()

tf.layers.conv2d(
    inputs,
    filters,
    kernel_size,
    strides=(1, 1),
    padding='valid',
    data_format='channels_last',
    dilation_rate=(1, 1),
    activation=None,
    use_bias=True,
    kernel_initializer=None,
    bias_initializer=tf.zeros_initializer(),
    kernel_regularizer=None,
    bias_regularizer=None,
    activity_regularizer=None,
    kernel_constraint=None,
    bias_constraint=None,
    trainable=True,
    name=None,
    reuse=None
)

tf.layers.conv2d()不只是完成tf.nn.conv2d()的2d卷积,它还负责激活、偏置项、初始化方法、正则化方法、约束条件、是否可训练、可复用等等。如果查看源代码,你会发现高阶的tf.layers.conv2d()最终调用了低阶tf.nn.conv2d()来实现2d卷积,并且调用其他低阶API完成初始化、激活、正则化、加偏置项等运算。
因此,低阶API完成一些最原始的、不可细分的运算和操作,高阶API提供对常见运算模式(例如卷积层的卷积+偏置项+BN+激活)的组合并发布给用户灵活调用

最底层的Kernel是运算/操作在某类设备上的具体实现,例如卷积运算在CPU、GPU、TPU上分别提供不同的kernel进行运算。如果你想在某类特定类型的设备上实现或优化某一个运算,满足能耗、性能等方面的要求,那么你需要在这一层实现特定的kernel。对TensorFlow进行扩展,参见TensorFlow Architecture

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容