赞
踩
开篇讲个笑话
前些日子,MSRA提出了使用Rdrop来提高模型的泛化性,我本着尝鲜的想法把其应用在我的任务上,但是发现效果并不好,甚至不如没有添加的效果。我就想啊想,不理解啊,为啥效果会不好呢?后来惊奇的发现代码里面除了bert层用的是0.1 的drop之外,没有其它层再用 dropout了,顿时泪奔!
dropout,暂退法,又叫丢弃法,是一种性能极其强大的正则化方法。
主要强调如下几个知识点:
Bert
模型中,默认的丢弃概率是0.1。import torch
from torch import nn
def dropout_layer(X, dropout):
assert 0 <= dropout <= 1
# 在本情况中,所有元素都被丢弃
if dropout == 1:
return torch.zeros_like(X)
# 在本情况中,所有元素都被保留
if dropout == 0:
return X
mask = (torch.rand(X.shape) > dropout).float()
return mask * X / (1.0 - dropout)
train
与 test
时的不同pytorch
的源码来看:
即通过是否在train
模式来选择是否使用 dropout
。在模型验证的时候,可以使用model.eval()
来让这个traning
参数变成false。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。