Keras 2 API 文档 / 层 API / 正则化层 / Dropout 层

Dropout 层

[源代码]

Dropout

tf_keras.layers.Dropout(rate, noise_shape=None, seed=None, **kwargs)

对输入应用 Dropout。

Dropout 层在训练期间的每个步骤中,会以 `rate` 的频率随机地将输入单元设置为 0,这有助于防止过拟合。未设置为 0 的输入会按 1/(1 - rate) 的比例放大,以使所有输入的总和保持不变。

注意,Dropout 层仅在 `training` 设置为 True 时才应用,以确保在推断期间不会丢弃任何值。使用 `model.fit` 时,`training` 会自动适当地设置为 True,而在其他上下文中,你可以在调用层时显式地将该 kwarg 设置为 True。

(这与将 Dropout 层设置为 `trainable=False` 不同。`trainable` 不会影响层的行为,因为 Dropout 没有可以在训练期间冻结的任何变量/权重。)

>>> tf.random.set_seed(0)
>>> layer = tf.keras.layers.Dropout(.2, input_shape=(2,))
>>> data = np.arange(10).reshape(5, 2).astype(np.float32)
>>> print(data)
[[0. 1.]
 [2. 3.]
 [4. 5.]
 [6. 7.]
 [8. 9.]]
>>> outputs = layer(data, training=True)
>>> print(outputs)
tf.Tensor(
[[ 0.    1.25]
 [ 2.5   3.75]
 [ 5.    6.25]
 [ 7.5   8.75]
 [10.    0.  ]], shape=(5, 2), dtype=float32)

参数

  • rate:介于 0 和 1 之间的浮点数。要丢弃的输入单元的比例。
  • noise_shape:表示将与输入相乘的二进制 dropout 掩码的形状的 1D 整数张量。例如,如果你的输入形状为 `(batch_size, timesteps, features)` 并且希望所有时间步都使用相同的 dropout 掩码,则可以使用 `noise_shape=(batch_size, 1, features)`。
  • seed:用作随机种子的 Python 整数。

调用参数

  • inputs:输入张量(任何秩)。
  • training:Python 布尔值,指示层应在训练模式下(添加 dropout)还是推断模式下(不执行任何操作)运行。