我目前正在尝试找到一种方法来检索给定层的哪些权重被“忽略”(特别是当我在测试阶段使用“训练”标志来使用 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 时使用的权重。
关于machine-learning - 在 Keras 中,dropout 应用在哪个权重上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54244630/