1

我目前正在尝试找到一种方法来检索给定层“忽略”哪些权重(尤其是当我在测试阶段使用“训练”标志使用 dropout 时)。有没有一种简单的方法可以找到它,或者我有义务创建一个自定义 dropout 层?

4

1 回答 1

1

没有简单的方法。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 时使用了哪些权重。

于 2019-01-17T21:58:12.917 回答