脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - 正则化DropPath/drop_path用法示例(Python实现)

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

2022-11-29 10:51风巽·剑染春水 Python

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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)

调用如下:

?
1
2
3
4
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)))

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

实验如下:

?
1
2
3
4
5
6
7
8
9
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]]]])

?
1
2
3
4
5
6
random_tensor.size():[4, 1, 1, 1]
random_tensor:
tensor([[[[0.]]],
        [[[1.]]],
        [[[1.]]],
        [[[1.]]]])
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
output.size():[4,3,2,2]
output:
tensor([[[[ 0.0000, -0.0000],
          [-0.00000.0000]],
         [[ 0.00000.0000],
          [ 0.00000.0000]],
         [[-0.00000.0000],
          [ 0.00000.0000]]],
 
        [[[-0.0322, -2.1924],
          [-2.5986, -1.2060]],
         [[ 1.07481.1689],
          [-0.42560.0088]],
         [[ 0.3836, -1.9848],
          [-1.4166, -0.7415]]],
 
        [[[ 1.29740.7846],
          [ 0.0192, -0.5955]],
         [[ 1.2644, -0.0339],
          [ 2.0762, -0.3012]],
         [[ 0.0851, -2.6027],
          [ 0.76710.1446]]],
 
        [[[ 0.6687, -3.5530],
          [ 0.8310, -2.0815]],
         [[ 0.01520.4236],
          [-1.3839, -0.7723]],
         [[-0.2303, -1.6282],
          [-0.40590.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内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_43426908/article/details/121662843

延伸 · 阅读

精彩推荐
  • Python利用Python开发App实战

    利用Python开发App实战

    本文重点在于介绍如何利用kivy+buildozer开发一款python app,因此对于kivy的开发过程,以及app功能进行了最简化。...

    Python专栏10152022-09-01
  • PythonPython如何利用pandas读取csv数据并绘图

    Python如何利用pandas读取csv数据并绘图

    这篇文章主要介绍了Python如何利用pandas读取csv数据并绘图,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    Hello AI!3342022-07-07
  • PythonPython unittest基本使用方法代码实例

    Python unittest基本使用方法代码实例

    这篇文章主要介绍了Python unittest基本使用方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可...

    拉努斯石5812020-06-30
  • PythonPython中不同进制的语法及转换方法分析

    Python中不同进制的语法及转换方法分析

    这篇文章主要介绍了Python中不同进制的语法及转换方法,结合实例形式分析了Python不同进制的表示方法及相互转换方法,需要的朋友可以参考下...

    feelang6552020-09-03
  • Pythonpython 查找字符串是否存在实例详解

    python 查找字符串是否存在实例详解

    这篇文章主要介绍了python 查找字符串是否存在实例详解的相关资料,需要的朋友可以参考下...

    脚本之家8732020-09-18
  • Pythonpython实现excel公式格式化的示例代码

    python实现excel公式格式化的示例代码

    这篇文章主要介绍了python实现excel公式格式化的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋...

    代码实体5942021-08-17
  • Pythonitchat-python搭建微信机器人(附示例)

    itchat-python搭建微信机器人(附示例)

    这篇文章主要介绍了itchat-python搭建微信机器人,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    lsn 加油鸭8122021-07-09
  • Python简单介绍Python中的filter和lambda函数的使用

    简单介绍Python中的filter和lambda函数的使用

    这篇文章主要简单介绍了Python中的filter和lambda函数的使用,是Python学习中的基础,同时lambda匿名函数的使用也是经常被用来对比各种编程语的重要特性,言需要...

    脚本之家5452020-05-31