TensorFlow的tf.layers和ctf.contrib.layers都提供了相关用于搭建神经网络的模块,但同一版本额和不同版本之间均存在区别,TF的更新真的是好快。。。

今天主要讨论一下tf.layers.densetf.contrib.layers.fully_connected的区别,二者都可以用于构建全连接层。参考tensorflow的文档,二者的参数如下,

  • tf.layers.dense

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    tf.layers.dense(
    inputs,
    units,
    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.fully-connected

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    fully_connected(
    inputs,
    num_outputs,
    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.layers.dense相对更简单,没有提供默认的activationkernel_initializer, 而后者这两个参数都做了默认的初始化。使用时一定要显示说明这些,否则会出现不可控的错误。。。

Reference