常用在全连接层的dropout在卷积层中效果很差,原因在于特征图上的各激活单元具有空间相关性,只丢弃几个神经元不影响信息的流通,所以成块的舍弃,强迫卷积网络从剩余信息中学习,能提高分类的准确率。
算法:
参数 控制drop块的个数,block_size控制丢弃块的大小。keep_prob就是dropout的参数
如:keep_prob=0.75 block_size=3 feature_map_size=15 = 0.03698
根据特征图A的维度随机生成一个矩阵,矩阵元素介于0-1之间,与 计算伯努利分布,将矩阵转化为包含-1 0 1 三个值的矩阵,再进行relu激活去负值,该矩阵为mask。 越大得到的mask的1越多。对mask进行填充和最大池化操作,block_size为池化参数。A×(1-mask)为最后的输出。
实现:
PyTorch版
https://github.com/miguelvr/dropblock
https://github.com/Randl/DropBlock-pytorch
https://github.com/gan3sh500/dropblock
TensorFlow版
https://github.com/DHZS/tf-dropblock
https://github.com/shenmbsw/tensorflow-dropblock
Dropout
为避免过拟合提出的,在训练过程中,全连接网络中每个神经元以P概率被舍弃,训练完成后神经元的输出乘以被舍弃的概率P,因为训练过程中dropout相当于网络瘦身,舍弃不同的神经元会得到不同的子网络,当训练完成后原神经网络尺寸过大,对其神经元输出的操作相当于对训练时可能出现的网络取平均。dropout刚出现时,要求全连接层的输入层P=0.2,隐藏层P=0.5,输出层不丢弃。