1.dropout是什么?有什么用?
1.1 让网络的神经元以一定的概率失活(输出置为0)。即是对每一层神经元的输出,以一定的概率把这些输出变为0,然后传递给下一层。
1.2 可以理解为,dropout可以让我们得到一个有很多模型集成而来的模型,因为每次训练的时候,神经元都不一样。
2.举例
2.1 代码
import numpy as np
def dropout():
"""
X为神经元的输出,H1为神经元的输出,U1为mask;
:return:
"""
p=0.5
X=[
[1,2,3],
[4,5,6],
[7,8,9]
]
W1= [0.1,0.2,0.3,]#1,8,21=3.0
b1= [0.1,0.2,0.3,]
H1=np.maximum(0, np.dot(W1,X) + b1)
print("H1:\n",H1)
# U1=np.random.rand(*H1.shape)
# print("U1:\n",U1,H1.shape,*H1.shape)
U1=np.random.rand(*H1.shape)<p #U1中小于p的被置1,大于p的被置0
print("U1:\n",U1)
H1*=U1#dropout操作
print("H1:\n",H1)
if __name__ == '__main__':
# main()
dropout()
2.2 输出
H1:
[3.1 3.8 4.5]
U1:
[False False True]
H1:
[0. 0. 4.5]