我目前正在尝试寻找一种方法来检索给定层的“权重”被忽略(特别是当我在测试阶段使用“训练”标志来使用辍学时)。 有找到它的简单方法吗?还是我有义务创建一个自定义的辍学图层?
答案 0 :(得分: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时使用了哪些权重。