1 # coding:utf-8
 2 import numpy as np
 3 
 4 # dropout函数的实现
 5 def dropout(x, level):
 6     if level < 0. or level >= 1: #level是概率值,必须在0~1之间
 7         raise ValueError('Dropout level must be in interval [0, 1[.')
 8     retain_prob = 1. - level#level是失活的概率
 9 
10     # 我们通过binomial函数,生成与x一样的维数向量。binomial函数就像抛硬币一样,我们可以把每个神经元当做抛硬币一样
11     # 硬币 正面的概率为p(为1的概率是p,也就是不失活的概率为p),n表示每个神经元试验的次数
12     # 因为我们每个神经元只需要抛一次就可以了所以n=1,size参数是我们有多少个硬币。
13     random_tensor = np.random.binomial(n=1, p=retain_prob, size=x.shape) #即将生成一个0、1分布的向量,0表示这个神经元被屏蔽,不工作了,也就是dropout了
14     print(random_tensor)
15 
16     x *= random_tensor
17     print(x)
18     x /= retain_prob#我们要保持预测输出和训练输出基本相同因此要除以不失活的概率
19 
20     return x
21 
22 #对dropout的测试,大家可以跑一下上面的函数,了解一个输入x向量,经过dropout的结果  
23 x=np.asarray([1,2,3,4,5,6,7,8,9,10],dtype=np.float32)
24 dropout(x,0.4)

深度学习中Dropout原理解析 - 知乎 (zhihu.com)

posted on 2023-09-19 10:04  小凉拖  阅读(6)  评论(0编辑  收藏  举报