Keras 2 API文档 / 层API / 核心层 / Dense层

全连接层

[源代码]

Dense

tf_keras.layers.Dense(
    units,
    activation=None,
    use_bias=True,
    kernel_initializer="glorot_uniform",
    bias_initializer="zeros",
    kernel_regularizer=None,
    bias_regularizer=None,
    activity_regularizer=None,
    kernel_constraint=None,
    bias_constraint=None,
    **kwargs
)

你常规的、全连接的神经网络层。

Dense 实现的操作为:output = activation(dot(input, kernel) + bias),其中activation是作为activation参数传递的逐元素激活函数,kernel是层创建的权重矩阵,bias是层创建的偏置向量(仅当use_biasTrue时适用)。这些都是Dense的属性。

注意:如果层的输入秩大于2,则Dense沿输入的最后一个轴和kernel的第0轴计算inputskernel之间的点积(使用tf.tensordot)。例如,如果输入具有维度(batch_size, d0, d1),那么我们创建一个形状为(d1, units)kernel,并且kernel沿着输入的轴2操作,对每个形状为(1, 1, d1)的子张量(有batch_size * d0个这样的子张量)。在这种情况下,输出的形状将是(batch_size, d0, units)

此外,在层被调用一次之后,除了trainable属性之外,层属性都不能被修改。当传入一个流行的关键字参数input_shape时,Keras将创建一个输入层并将其插入到当前层之前。这可以被视为显式定义InputLayer

示例

>>> # Create a `Sequential` model and add a Dense layer as the first layer.
>>> model = tf.keras.models.Sequential()
>>> model.add(tf.keras.Input(shape=(16,)))
>>> model.add(tf.keras.layers.Dense(32, activation='relu'))
>>> # Now the model will take as input arrays of shape (None, 16)
>>> # and output arrays of shape (None, 32).
>>> # Note that after the first layer, you don't need to specify
>>> # the size of the input anymore:
>>> model.add(tf.keras.layers.Dense(32))
>>> model.output_shape
(None, 32)

参数

  • units:正整数,输出空间的维度。
  • activation:要使用的激活函数。如果不指定任何内容,则不应用激活(即“线性”激活:a(x) = x)。
  • use_bias:布尔值,表示该层是否使用偏置向量。
  • kernel_initializerkernel 权重矩阵的初始化器。
  • bias_initializer:偏置向量的初始化器。
  • kernel_regularizer:应用于 kernel 权重矩阵的正则化函数。
  • bias_regularizer:应用于偏置向量的正则化函数。
  • activity_regularizer:应用于层输出(其“激活”)的正则化函数。
  • kernel_constraint:应用于 kernel 权重矩阵的约束函数。
  • bias_constraint:应用于偏置向量的约束函数。

输入形状

N维张量,形状为:(batch_size, ..., input_dim)。最常见的情况是形状为(batch_size, input_dim)的2D输入。

输出形状

N维张量,形状为:(batch_size, ..., units)。例如,对于形状为(batch_size, input_dim)的2D输入,输出的形状将是(batch_size, units)