tf.contrib.layer, tf.layer, tf.nn, tf.keras.layer, tf.contrib.slim 的区别联系

tensorflow 的不同模块下面存有很多相似的函数,目前会出现几种情况:

  • 情况一: tf不同模块下面的函数共享,通过别称来统一
  • 情况二: tf不同模块下面的函数相似,使用情况相同,但函数本身稍有不同
  • 情况三: tf不同版本之间的函数会有变更及废止,函数也可能出现迁移到其他模块下面的情况

tensorflow 1.8.版中各模块的官方解释:

tf.contrib:

contrib module containing volatile or experimental code.
contrib 模型保存具有试验性, 极易变更的代码

tf.contrib.layer

Ops for building neural network layers, regularizers, summaries, etc.
tf.contribute.layer 中存有 用于构建神经网络层,正则化程序,摘要等的函数

tf.nn

None
未做注释,但存有有关神经网络基础运算的函数

tf.layer

Public API for tf.layers namespace.
tf.layers命名空间的API, 函数相对来说比较稳定

tf.contrib.slim

TF-Slim is a lightweight library for defining, training and evaluating complex models in TensorFlow. Components of tf-slim can be freely mixed with native tensorflow, as well as other frameworks, such as tf.contrib.learn.
TF-Slim是一个轻量级库,用于在TensorFlow中定义,训练和评估复杂模型。 tf-slim的组件可以与native tensorflow以及其他框架(如tf.contrib.learn)自由混合

tf.keras.

Keras is an object-oriented API for defining and training neural networks.
This module contains a pure-TensorFlow implementation of the Keras API, allowing for deep integration with >TensorFlow functionality.
Keras是一个面向对象的API,用于定义和训练神经网络。 该模块包含Keras API的纯TensorFlow实现,允许与TensorFlow功能进行深度集成


情况一:

tf.contrib.layer, tf.layer, tf.nn, tf.keras.layer, tf.contrib.slim 的区别联系_第1张图片
由图可见, tf.keras.layers中的函数在tf.compat.中也会出现. 名称不同,使用同一函数,完成相同功能


情况二:

以tensorflow 1.8.0为例:

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.contrib.layers 中的conv2d

tf.contrib.layers.conv2d(
    inputs,
    num_outputs,
    kernel_size,
    stride=1,
    padding='SAME',
    data_format=None,
    rate=1,
    activation_fn=tf.nn.relu,
    normalizer_fn=None,
    normalizer_params=None,
    weights_initializer=initializers.xavier_initializer(),
    weights_regularizer=None,
    biases_initializer=tf.zeros_initializer(),
    biases_regularizer=None,
    reuse=None,
    variables_collections=None,
    outputs_collections=None,
    trainable=True,
    scope=None
)

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
)

总的来说,不同模块下面的函数类似,但是具体的参数会有不同.相对起来,tf.contrib下面的函数由于函数丰富,使用的人数更多,但tf.contrib下面的模块存在被废止更新的风险. tf.layer 稳定


情况三:

tensorflow 1.12 版本中tf.conrib.layer函数与1.8版本比较:

tf.contrib.layer, tf.layer, tf.nn, tf.keras.layer, tf.contrib.slim 的区别联系_第2张图片 tf.contrib.layer, tf.layer, tf.nn, tf.keras.layer, tf.contrib.slim 的区别联系_第3张图片
  • 如图可知,函数有所变动
  • 但各个模型中函数总体变动不大,趋于稳定.

总结:
相同名称函数实现功能相似,一般情况下,同名函数之间可以相互替代,但会因为module不同略有差异,因此实践操作时不确定的函数建议查看官网文档.

你可能感兴趣的:(tensorflow)