tf.layers.dense和tf.nn.xw_plus_b之间的区别

时间:2018-12-13 11:36:37

标签: python python-3.x tensorflow

"PackageA v1.2.0"中的tf.layers.densetf.nn.xw_plus_b有什么区别? 当将“激活”参数作为TF传递时,tf.layers.dense中使用的默认激活是什么?

1 个答案:

答案 0 :(得分:5)

tf.nn.xw_plus_b是仅计算x*W+b且需要现有变量的低级操作。

tf.layers.dense是一个高级“层”,它创建变量,应用激活可以设置约束并应用正则化。

根据documentation的默认激活是线性的(无激活)。

  

激活:激活功能(可调用)。设置为None即可维护   线性激活。

更新

在Tensorflow 1.12 Dense层中继承keras.layers.Densecode):

@tf_export('layers.Dense')
class Dense(keras_layers.Dense, base.Layer):

此层的Keras实现执行以下操作(code):

  def call(self, inputs):
    inputs = ops.convert_to_tensor(inputs, dtype=self.dtype)
    rank = common_shapes.rank(inputs)
    if rank > 2:
      # Broadcasting is required for the inputs.
      outputs = standard_ops.tensordot(inputs, self.kernel, [[rank - 1], [0]])
      # Reshape the output back to the original ndim of the input.
      if not context.executing_eagerly():
        shape = inputs.get_shape().as_list()
        output_shape = shape[:-1] + [self.units]
        outputs.set_shape(output_shape)
    else:
      outputs = gen_math_ops.mat_mul(inputs, self.kernel)
    if self.use_bias:
      outputs = nn.bias_add(outputs, self.bias)
    if self.activation is not None:
      return self.activation(outputs)  # pylint: disable=not-callable
    return outputs

因此,它不是使用tf.nn.xw_plus_b实现的,而是使用了两个单独的操作。

要回答您的问题:没有激活的Dense层,约束和正则化应与tf.nn.xw_plus_b相同。