import tensorflow as tf import numpy as np tf.random.set_seed(3) layer=tf.keras.layers.Dropout(.2,input_shape=(2,)) data=np.arange(10).reshape(5,2).astype(np.float32) print(data) outputs=layer(data,training=True) print(outputs) print(np.mean(data),np.mean(outputs)),打印结果:
[[0. 1.] [2. 3.] [4. 5.] [6. 7.] [8. 9.]] tf.Tensor( [[ 0. 1.25] [ 2.5 0. ] [ 5. 6.25] [ 0. 8.75] [10. 11.25]], shape=(5, 2), dtype=float32) 4.5 4.5,每个节点有0.2的概率变为0,P(变为0)=0.2,不变为0的话变大为1/P(不变为0)倍,以使输入的期望不变。适用于大网络中防止过拟合。keras中的dropout源码:
import numpy as np
def dropout(x,level):
if level<0. or level>=1:
raise Exception('Dropout level must be in interval [0,1].')
retain_prob=1.-level
sample=np.random.binomial(n=1,p=retain_prob,size=x.shape)
print(sample)
x*=sample
print(x)
x/=retain_prob
print(x)
return x
x=np.asarray([1,2,3,4,5,6,7,8,9,10],dtype=np.float32)
dropout(x,0.4)
参考链接:TensorFlow 2.9 [中文] keras tf.keras.layers.Dropout
谈谈Tensorflow的dropout
深度学习(二十二)Dropout浅层理解与实现