我目前正在尝试找到一种方法来检索给定层的哪些权重被“忽略”(特别是当我在测试阶段使用"training“标志来使用dropout时)。有没有简单的方法可以找到它,或者我有义务创建一个自定义的排除层?
发布于 2019-01-17 21:58:13
没有简单的方法。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时使用的权重。
https://stackoverflow.com/questions/54244630
复制相似问题