1. Inverted dropout
大家都知道dropout是一个概率值,它表示的是a[l] (第l层的输入)中的元素以多大的概率置零。这里我们用它的对偶变量keep-prob代替dropout,它表示的是以多大的概率保留元素。可见dropout+keep-prob=1。
现在我们以一个三层的神经网络为例,讨论keep-drop在神经网络中是如何发生作用的。
import numpy as np
keep_prod = 0.8
a3 = np.random.rand(3,4)
print("a3-before",a3)
d3 = np.random.rand(a3.shape[0],a3.shape[1])<keep_prod
print("d3",d3)
a3=np.multiply(a3,d3)
print("a3-after",a3)
上述代码显示的是第三层中keep-drop的运行过程,a[3]为第3层的输出结果,d[3]为keep-drop的index数组,它与a[3]同样大小,元素非0即1。两者对应位置相乘,a[3]中d[3]的1对应的位置,元素值保留,否则置为零。这就是keep-prod的过程,输出如下所示:
a3-before
[[ 0.6016695 0.733025 0.38694513 0.17916196]
[ 0.39412193 0.22803599 0.16931667 0.30190426]
[ 0.8822327