回到首页

dropout

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浅层理解与实现

本文创建于2022.9.27/0.12,修改于2022.9.27/0.12