模型训练技巧——mixup
程序员文章站
2022-06-01 23:28:22
...
论文:https://arxiv.org/abs/1710.09412
代码:https://github.com/facebookresearch/mixup-cifar10
1. 论文核心
(xi,yi)和(xj,yj)是从训练数据中随机抽取的两个样本,且λ∈[0,1]。因此,mixup通过结合先验知识,即特征向量的线性插值应导致相关标签的线性插值,来扩展训练分布。mixup仅需要几行代码即可实现,且引入了最小计算开销。
注意:yi和yj都必须时独热编码的形式。
通俗理解:将输入的数据进行一定比例的混合,标签以相同比例进行线性组合。
2. 代码实现
def mixup_data(x, y, alpha=0.2, use_cuda=True):
'''Returns mixed inputs, pairs of targets, and lambda'''
if alpha > 0:
lam = np.random.beta(alpha, alpha)
else:
lam = 1
batch_size = x.size()[0]
if use_cuda:
index = torch.randperm(batch_size).cuda()
else:
index = torch.randperm(batch_size)
mixed_x = lam * x + (1 - lam) * x[index, :]
y_a, y_b = y, y[index]
return mixed_x, y_a, y_b, lam
def mixup_criterion(criterion, pred, y_a, y_b, lam):
return lam * criterion(pred, y_a) + (1 - lam) * criterion(pred, y_b)
########在train函数中做以下修改,其他地方不做任何修改
for batch_idx, (inputs, targets) in enumerate(trainloader):
inputs, targets = inputs.cuda(), targets.cuda()
inputs, targets_a, targets_b, lam = mixup_data(inputs, targets)
outputs = net(inputs)
loss = mixup_criterion(criterion, outputs, targets_a, targets_b, lam)
可见,mixup实现起来非常简单。博主将该trick融入自己的项目中,如果需要就开启该功能。
3. 实验效果
可见,用了mixup,在UCI数据集上得到了更低的错误率。当然,作者还做了很多其他实验,这里不再赘述。
小结:该trick用几十行代码即可实现,并且丝毫不影响模型识别速度,值得尝试。另外,mixup和label smoothing结合起来使用效果更加。
下一篇: html之大白 - 安河桥下
推荐阅读
-
分享8个Laravel模型时间戳使用技巧小结
-
用bert训练模型并转换为pb格式
-
Intel开发出深度学习新算法SLIDE:突破性提升CPU模型训练速度
-
Tensorflow加载预训练模型和保存模型的实例
-
基于jupyter notebook的python编程(Win10通过OpenCv-3.4.1进行人脸口罩数据集的模型训练并进行戴口罩识别检测)
-
Tensorflow实现在训练好的模型上进行测试
-
从训练好的tensorflow模型中打印训练变量实例
-
利用TensorFlow训练简单的二分类神经网络模型的方法
-
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
-
python 用opencv调用训练好的模型进行识别的方法