在 Keras 中,dropout 应用于哪个权重?

In Keras, on which weight is the dropout applied?

我目前正在尝试找到一种方法来检索给定层的哪些权重是 "ignored"(尤其是当我在测试阶段使用 "training" 标志来使用 dropout 时)。 有没有一种简单的方法可以找到它,还是我必须创建一个自定义的 dropout 层?

没有简单的方法。 Keras 的 tensorflow 后端简单地调用 tf.nn.dropout,它通过生成其输入大小的随机矩阵来工作,如果随机矩阵中的相应值小于阈值,则将输入中的值设置为零。

这里是关键步骤,位于https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/nn_ops.py:

# Sample a uniform distribution on [0.0, 1.0) and select values larger than
# rate.
random_tensor = random_ops.random_uniform(
    noise_shape, seed=seed, dtype=x.dtype)
keep_prob = 1 - rate
ret = (1 / keep_prob) * math_ops.cast(keep_prob >= random_tensor,
                                      x.dtype) * x

您无法通过 keras 直接检索这些结果,因为随机乘法是立即应用的,不会保存。但是,您可以尝试修改源代码以打印或保存 math_ops.cast(keep_prob >= random_tensor,x.dtype) 的结果,其中包含在使用 dropout 时使用了哪些权重。