DropPath/drop_path 是一种正则化手段,其效果是将深度学习模型中的多分支结构随机”删除“,python中实现如下所示:

def drop_path(x, drop_prob: float = 0., training: bool = False):
    if drop_prob == 0. or not training:
        return x
    keep_prob = 1 - drop_prob
    shape = (x.shape[0],)   (1,) * (x.ndim - 1)  
    random_tensor = keep_prob   torch.rand(shape, dtype=x.dtype, device=x.device)
    random_tensor.floor_()  # binarize
    output = x.div(keep_prob) * random_tensor
    return output


class DropPath(nn.Module):
    def __init__(self, drop_prob=None):
        super(DropPath, self).__init__()
        self.drop_prob = drop_prob

    def forward(self, x):
        return drop_path(x, self.drop_prob, self.training)

调用如下:

self.drop_path = DropPath(drop_prob) if drop_prob > 0. else nn.Identity()

x = x   self.drop_path(self.token_mixer(self.norm1(x)))
x = x   self.drop_path(self.mlp(self.norm2(x)))

看起来似乎有点迷茫,这怎么就随机删除了分支呢

实验如下:

import torch

drop_prob = 0.2
keep_prob = 1 - drop_prob
x = torch.randn(4, 3, 2, 2)
shape = (x.shape[0],)   (1,) * (x.ndim - 1)
random_tensor = keep_prob   torch.rand(shape, dtype=x.dtype, device=x.device)
random_tensor.floor_()
output = x.div(keep_prob) * random_tensor

输出:

x.size():[4,3,2,2]
x:
tensor([[[[ 1.3833, -0.3703],
          [-0.4608,  0.6955]],
         [[ 0.8306,  0.6882],
          [ 2.2375,  1.6158]],
         [[-0.7108,  1.0498],
          [ 0.6783,  1.5673]]],

        [[[-0.0258, -1.7539],
          [-2.0789, -0.9648]],
         [[ 0.8598,  0.9351],
          [-0.3405,  0.0070]],
         [[ 0.3069, -1.5878],
          [-1.1333, -0.5932]]],

        [[[ 1.0379,  0.6277],
          [ 0.0153, -0.4764]],
         [[ 1.0115, -0.0271],
          [ 1.6610, -0.2410]],
         [[ 0.0681, -2.0821],
          [ 0.6137,  0.1157]]],

        [[[ 0.5350, -2.8424],
          [ 0.6648, -1.6652]],
         [[ 0.0122,  0.3389],
          [-1.1071, -0.6179]],
         [[-0.1843, -1.3026],
          [-0.3247,  0.3710]]]])

random_tensor.size():[4, 1, 1, 1]
random_tensor:
tensor([[[[0.]]],
        [[[1.]]],
        [[[1.]]],
        [[[1.]]]])
output.size():[4,3,2,2]
output:
tensor([[[[ 0.0000, -0.0000],
          [-0.0000,  0.0000]],
         [[ 0.0000,  0.0000],
          [ 0.0000,  0.0000]],
         [[-0.0000,  0.0000],
          [ 0.0000,  0.0000]]],

        [[[-0.0322, -2.1924],
          [-2.5986, -1.2060]],
         [[ 1.0748,  1.1689],
          [-0.4256,  0.0088]],
         [[ 0.3836, -1.9848],
          [-1.4166, -0.7415]]],

        [[[ 1.2974,  0.7846],
          [ 0.0192, -0.5955]],
         [[ 1.2644, -0.0339],
          [ 2.0762, -0.3012]],
         [[ 0.0851, -2.6027],
          [ 0.7671,  0.1446]]],

        [[[ 0.6687, -3.5530],
          [ 0.8310, -2.0815]],
         [[ 0.0152,  0.4236],
          [-1.3839, -0.7723]],
         [[-0.2303, -1.6282],
          [-0.4059,  0.4638]]]])

random_tensor作为是否保留分支的直接置0项,若drop_path的概率设为0.2,random_tensor中的数有0.2的概率为0,而output中被保留概率为0.8。

结合drop_path的调用,若x为输入的张量,其通道为[B,C,H,W],那么drop_path的含义为在一个Batch_size中,随机有drop_prob的样本,不经过主干,而直接由分支进行恒等映射。

总结

到此这篇关于正则化DropPath/drop_path用法(Python实现)的文章就介绍到这了,更多相关正则化DropPath/drop_path内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

正则化DropPath/drop_path用法示例(Python实现)的更多相关文章

  1. 正则化DropPath/drop_path用法示例(Python实现)

    DropPath 类似于Dropout,不同的是 Drop将深度学习模型中的多分支结构随机"失效",而Dropout是对神经元随机"失效"这篇文章主要给大家介绍了关于正则化DropPath/drop_path用法的相关资料,需要的朋友可以参考下

  2. 机器学习 – 为什么需要在机器学习问题中使用正则化?

    为什么在这种情况下我们更喜欢较小的重量?

  3. 正则化方法:L1和L2 regularization、数据集扩增、dropout

    有一个概念需要先说明,在机器学习算法中,我们常常将原始数据集分为三部分:trainingdata、validationdata,testingdata。因此,trainingdata的作用是计算梯度更新权重,validationdata如上所述,testingdata则给出一个accuracy以判断网络的好坏。避免过拟合的方法有很多:earlystopping、数据集扩增、正则化包括L1、L2,dropout。L1regularization在原始的代价函数后面加上一个L1正则化项,即所有权重w的绝对值的

  4. 机器学习中正则化项L1和L2的直观理解

    正则化机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般英文称作11-norm和22-norm,中文称作L1正则化和L2正则化,或者L1范数和L2范数。L1正则化和L2正则化可以看做是损失函数的惩罚项。L1和L2正则化的直观理解这部分内容将解释为什么L1正则化可以产生稀疏模型,以及为什么L2正则化可以防止过拟合。而正则化前面的系数αα,可以控制LL图形的大小。

  5. 机器学习 – TensorFlow – L2丢失的正则化,如何应用于所有权重,而不仅仅是最后一个?

    我有一个任务,涉及到使用L2丢失的一个隐藏的ReLU层向网络引入泛化。我不知道如何正确引入它,以便所有权重都受到惩罚,不仅仅是输出层的权重。代码网络没有泛化是在底部的帖子。引入L2的明显方法是用这样的代替损失计算:但在这种情况下,它将考虑到输出层权重的值。是否需要或引入惩罚的输出层将以某种方式保持隐藏的权重也在检查?hidden_weights,hidden_biases,out_weights和out_biases都是您正在创建的模型参数。您可以按如下所示对所有这些参数添加L2正则化:

  6. 正则化方法:防止过拟合,提高泛化能力

    λ就是正则项系数,权衡正则项与C0项的比重。当然考虑到后面的导数项,w最终的值可能增大也可能减小。而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。

  7. 机器学习 – TensorFlow – 将L2正则化和退出引入网络.有什么意义吗?

    如果是这样,怎么办?任何关于此事的参考将是有用的,我还没有找到任何信息.为了防止你有兴趣,我的代码为ANN与L2正则化在下面:好的,经过一些额外的努力,我设法解决它,并将L2和辍学引入我的网络,代码如下.在同一个网络中,我没有辍学略有改善.我仍然不确定是否真的很值得介绍他们两个,L2和辍学的努力,但至少它的作品,并略微提高了结果.

  8. 吴恩达机器学习 - 逻辑回归的正则化

    题目链接:点击打开链接先贴笔记代码:costFunction.m:然后展示下不同λ画出的不同图案

  9. 深度学习中的拟合欠拟合、过拟合、正则化

    我们不论在逻辑回归,线性回归还是在神经网络中应用的都是线性函数。那么如果出现了欠拟合或者过拟合该怎么办呢。这里主要说一下L2正则的原理,看下图:这是我们加了正则化之后的成本函数,可以看我们后面加入了正则化λ的表达式来完善成本函数。而使得整个模型越来越接近于线性化,也就是从下图中的过拟合往欠拟合偏转。

  10. 机器学习从入门到XX四:过拟合和正则化

    图2采用$y=θ_0+θ_1x+θ_2x^2$,我们得到了一个拟合度更好的曲线。然而,如果加入过多的特征,尽管可以获得“完美”的拟合度,但是却不是一个好的预测函数。从而得到几乎是接近二次函数的假设函数。我们只要将所有的θ都添加进代价函数,就实现了正则化的代价函数:$$min_\theta\\frac{1}{2m}\sum_{i=1}^m^2+λ\sum_{j=1}^nθ_j^2$$这里的λ是正则化参数,可以想象,如果λ过大,最终的假设函数会趋向于常数项$θ_0$,从而造成拟合不足;而过小的λ,会使得正则化

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部