Pytorch各种Dropout层应用于详解

目录

torch框架Dropout functions详解

dropout

用途

用法

使用技巧

参数

数学理论公式

代码示例

alpha_dropout

用途

用法

使用技巧

参数

数学理论公式

代码示例 

feature_alpha_dropout

用途

用法

使用技巧

参数

数学理论

代码示例

dropout1d

用途

用法

使用技巧

参数

数学理论

代码示例

dropout2d

用途

用法

使用技巧

参数

数学理论

代码示例

dropout3d

用途

用法

使用技巧

参数

数学理论

代码示例

总结


torch框架Dropout functions详解

dropout

torch.nn.functional.dropout 是 PyTorch 深度学习框架中的一个功能模块,主要用于在训练神经网络时防止过拟合。这个函数通过随机地将输入张量中的某些元素置零来实现正则化效果。

用途

  1. 防止过拟合:在训练过程中,dropout 可以减少对特定神经元的依赖,从而增强模型的泛化能力。
  2. 模型正则化:作为一种正则化技术,可以提高模型对噪声的鲁棒性。

用法

基本用法如下:

output = torch.nn.functional.dropout(input, p=0.5, training=True, inplace=False)

其中:

  • input:输入数据
  • p:零化元素的概率
  • training:是否在训练模式下应用 dropout
  • inplace:是否原地执行此操作

使用技巧

  1. 选择合适的 p 值:p 值太大可能导致信息丢失,太小则可能效果不明显。
  2. 训练和测试阶段的差异:确保在训练阶段启用 dropout,在测试或评估阶段关闭。
  3. inplace 参数的使用:只在确保不影响后续计算的情况下使用 inplace 操作。

参数

  • p(float):元素被零化的概率,默认值为 0.5。
  • training(bool):如果为 True,则应用 dropout,默认为 True。
  • inplace(bool):如果设置为 True,则原地修改数据,默认为 False。

数学理论公式

公式:Y=X*M

其中:

  • Y:输出数据
  • X:输入数据
  • M:由伯努利分布生成的掩码,其中 M 中的元素独立且等概率地为 0 或 1/(1-p)​。

代码示例

import torch
import torch.nn.functional as F# 输入数据
input = torch.randn(5)# 应用 dropout
output = F.dropout(input, p=0.5, training=True)print(output)  # 输出结果可能类似于 tensor([ 0.0000, -0.0000, -1.8468, 0.0000, -0.0000])

在这个例子中,我们首先定义了一个随机的输入张量 input。接着,我们应用 torch.nn.functional.dropout 函数,并设置 dropout 概率为 0.5。由于 training 参数设置为 True,函数将随机地将一些元素置零。输出结果会显示一些元素为零,而其他元素的值会增加以保持总体激活水平。 

alpha_dropout

torch.nn.functional.alpha_dropout 是 PyTorch 中的一个功能模块,专门用于应用 alpha dropout。Alpha dropout 是一种特殊的 dropout 方法,它不仅随机地将输入张量中的一些元素置零,而且还保持了输入数据的平均值和方差。这种方法特别适用于自归一化的神经网络,如基于 Scaled Exponential Linear Units (SELU) 的网络。

用途

  1. 维持自归一化属性:对于使用 SELU 激活函数的网络,alpha dropout 可以保持输入数据的平均值和方差,有助于维持网络的自归一化属性。
  2. 减少过拟合:和传统的 dropout 一样,alpha dropout 可以减少模型对训练数据的过度拟合。

用法

output = torch.nn.functional.alpha_dropout(input, p=0.5, training=False, inplace=False)

其中:

  • input:输入数据
  • p:元素被零化的概率
  • training:是否在训练模式下应用 alpha dropout
  • inplace:是否原地执行此操作

使用技巧

  1. 适用于 SELU 激活函数的网络:在使用 SELU 激活函数的网络中使用 alpha dropout 可以获得最佳效果。
  2. 训练与测试阶段的差异:确保在训练阶段启用 alpha dropout,在测试或评估阶段关闭。

参数

  • p(float):元素被零化的概率,默认值为 0.5。
  • training(bool):如果为 True,则应用 alpha dropout,默认为 False。
  • inplace(bool):如果设置为 True,则原地修改数据,默认为 False。

数学理论公式

 Y=\begin{Bmatrix} {\alpha }'\cdot M+\alpha , IF \ training\\ X, otherwise \end{Bmatrix}

其中:

  • Y:输出数据
  • X:输入数据
  • M:一个掩码,其中元素独立且等概率地为 0 或 1。
  • α 和 α′:预定义的常数,用于保持输入的平均值和方差。

代码示例 

import torch
import torch.nn.functional as F# 输入数据
input = torch.randn(5)# 应用 alpha dropout
output = F.alpha_dropout(input, p=0.5, training=True)print(output)  # 输出结果可能类似于 tensor([-1.7580,  0.0000,  0.0000, -0.6776,  1.3564])

在这个例子中,我们首先定义了一个随机的输入张量 input。接着,我们应用 torch.nn.functional.alpha_dropout 函数,并设置 dropout 概率为 0.5。由于 training 参数设置为 True,函数将根据 alpha dropout 的规则随机地将一些元素置零并调整其他元素的值。

feature_alpha_dropout

 

torch.nn.functional.feature_alpha_dropout 是 PyTorch 中的一个特殊的 dropout 函数,它专门用于随机屏蔽输入张量的整个通道。这种方法在深度学习中尤其适用于保持卷积网络中特征映射(feature maps)的结构完整性。与传统的 dropout 不同,它将激活值设置为 SELU(Scaled Exponential Linear Unit)激活函数的负饱和值,而不是简单地置零。

用途

  1. 维持特征映射的完整性:通过屏蔽整个特征映射,而不是单个激活值,帮助保持特征的结构。
  2. 适用于 SELU 激活的网络:特别适合于使用 SELU 激活函数的网络,因为它保持了激活值的负饱和状态。

用法

output = torch.nn.functional.feature_alpha_dropout(input, p=0.5, training=True, inplace=False)

其中:

  • input:输入张量
  • p:通道被零化的概率
  • training:是否在训练模式下应用 feature alpha dropout
  • inplace:是否原地执行此操作

使用技巧

  1. 适用于具有 SELU 激活的网络:这种 dropout 形式特别适合于使用 SELU 激活函数的网络。
  2. 注意训练和测试阶段的差异:确保在训练阶段启用 feature alpha dropout,在测试或评估阶段关闭。

参数

  • p(float):通道被零化的概率,默认为 0.5。
  • training(bool):如果为 True,则应用 feature alpha dropout,默认为 True。
  • inplace(bool):如果设置为 True,则原地修改数据,默认为 False。

数学理论

与传统 dropout 相比,feature alpha dropout 不仅仅是将激活值简单地置零。相反,它将被屏蔽的激活值设置为 SELU 激活函数的负饱和值,同时保持输入数据的均值和方差。这是通过对每个通道独立应用伯努利分布来实现的,每个通道被屏蔽的概率为 p。

代码示例

 

import torch
import torch.nn.functional as F# 输入数据
input = torch.randn(1, 3, 4, 4)  # 假设是一个具有 3 个通道的特征映射# 应用 feature alpha dropout
output = F.feature_alpha_dropout(input, p=0.5, training=True)print(output)  # 输出结果会显示部分通道的激活值被设置为 SELU 的负饱和值

在这个例子中,我们首先定义了一个具有 3 个通道的随机输入张量 input,其形状为 (1, 3, 4, 4),表示有 1 个样本,3 个通道,每个通道是一个 4x4 的特征映射。然后,我们应用 torch.nn.functional.feature_alpha_dropout 函数,并设置 dropout 概率为 0.5。由于 training 参数设置为 True,函数将随机地选择一些通道并将它们的激活值设置为 SELU 激活函数的负饱和值,而保留其他通道不变。

这种处理方式有助于在训练使用 SELU 激活函数的卷积网络时,保持特征映射的完整性,并减少过拟合。它是一种更精细的正则化方法,特别适用于深度学习中的图像处理和其他需要保持空间结构的应用。

dropout1d

torch.nn.functional.dropout1d 是 PyTorch 中的一个函数,专门用于在一维数据上应用 dropout。它的主要作用是随机将输入张量的整个通道置零。这种方法在处理一维特征映射(例如,在卷积神经网络中处理时间序列数据或一维信号)时特别有用。

用途

  1. 防止一维数据过拟合:通过随机地屏蔽整个通道,dropout1d 减少了模型对单个通道的依赖,从而增强了模型的泛化能力。
  2. 适用于一维特征映射:特别适用于处理一维数据,如时间序列或一维信号。

用法

output = torch.nn.functional.dropout1d(input, p=0.5, training=True, inplace=False)

其中:

  • input:输入张量
  • p:通道被零化的概率
  • training:是否在训练模式下应用 dropout1d
  • inplace:是否原地执行此操作

使用技巧

  1. 选择合适的 p 值:p 值太大可能导致信息丢失,太小则可能效果不明显。
  2. 训练和测试阶段的差异:确保在训练阶段启用 dropout1d,在测试或评估阶段关闭。
  3. 一维数据结构:确保输入数据的结构符合一维特征映射的形式。

参数

  • p(float):通道被零化的概率,默认为 0.5。
  • training(bool):如果为 True,则应用 dropout1d,默认为 True。
  • inplace(bool):如果设置为 True,则原地修改数据,默认为 False。

数学理论

与传统的 dropout 相似,dropout1d 函数在每次前向传播时,都会根据伯努利分布以概率 p 随机选择一些通道并将它们置零。不同之处在于,dropout1d 是对整个一维通道进行操作,而不是单个元素。

代码示例

 

import torch
import torch.nn.functional as F# 输入数据
input = torch.randn(1,3, 10) # 假设是一个具有 3 个通道的一维特征映射,每个通道有 10 个元素output = F.dropout1d(input, p=0.5, training=True)print(output) # 输出结果可能显示一些通道被完全置零

在这个例子中,我们首先定义了一个随机的一维输入张量 `input`,其形状为 `(1, 3, 10)`,表示有 1 个样本,3 个通道,每个通道有 10 个元素。然后,我们应用 `torch.nn.functional.dropout1d` 函数,并设置 dropout 概率为 0.5。由于 `training` 参数设置为 True,函数将在每次前向传播时随机地选择一些通道并将它们完全置零。这种处理方式有助于在训练一维数据时减少过拟合,尤其适用于处理如音频、时间序列或任何一维信号数据的场景。通过随机地屏蔽整个通道,它鼓励模型学习到更加鲁棒的特征表示。

dropout2d

torch.nn.functional.dropout2d 是 PyTorch 中的一个函数,专用于在二维数据上应用 dropout。这个函数的主要作用是在每次前向传播时,随机将输入张量的整个二维通道(即二维特征映射)置零。这在处理具有空间特征的数据,如图像数据,在卷积神经网络中尤为有用。

用途

  1. 防止二维数据过拟合:通过随机地屏蔽整个通道,dropout2d 减少了模型对单个通道的依赖,从而增强了模型的泛化能力。
  2. 适用于图像处理:特别适用于图像数据等二维特征映射的处理。

用法

output = torch.nn.functional.dropout2d(input, p=0.5, training=True, inplace=False)

其中:

  • input:输入张量
  • p:通道被零化的概率
  • training:是否在训练模式下应用 dropout2d
  • inplace:是否原地执行此操作

使用技巧

  1. 选择合适的 p 值:p 值太大可能导致信息丢失,太小则可能效果不明显。
  2. 训练和测试阶段的差异:确保在训练阶段启用 dropout2d,在测试或评估阶段关闭。
  3. 二维数据结构:确保输入数据的结构符合二维特征映射的形式。

参数

  • p(float):通道被零化的概率,默认为 0.5。
  • training(bool):如果为 True,则应用 dropout2d,默认为 True。
  • inplace(bool):如果设置为 True,则原地修改数据,默认为 False。

数学理论

dropout2d 函数在每次前向传播时,都会根据伯努利分布以概率 p 随机选择一些通道并将它们置零。不同之处在于,dropout2d 是对整个二维通道进行操作,而不是单个元素。

代码示例

import torch
import torch.nn.functional as F# 输入数据
input = torch.randn(1, 3, 8, 8)  # 假设是一个具有 3 个通道的二维特征映射,每个通道是一个 8x8 的图像# 应用 dropout2d
output = F.dropout2d(input, p=0.5, training=True)print(output)  # 输出结果可能显示一些通道被完全置零

在这个例子中,我们首先定义了一个随机的二维输入张量 input,其形状为 (1, 3, 8, 8),表示有 1 个样本,3 个通道,每个通道是一个 8x8 的图像(或二维特征映射)。然后,我们应用了 torch.nn.functional.dropout2d 函数,并设置了 dropout 概率为 0.5。由于 training 参数设置为 True,函数将在每次前向传播时随机地选择一些通道并将它们完全置零。这种处理方式有助于在训练图像或其他二维数据时减少过拟合,尤其适用于卷积神经网络中的图像识别、图像分类等场景。通过随机地屏蔽整个通道,它鼓励模型学习到更加鲁棒的特征表示,从而提高模型在新数据上的泛化能力。

dropout3d

torch.nn.functional.dropout3d 是 PyTorch 中的一个函数,用于在三维数据上应用 dropout。这个函数的主要作用是在每次前向传播时,随机将输入张量的整个三维通道(即三维特征映射)置零。这在处理具有三维空间特征的数据,如三维图像或体积数据,在卷积神经网络中尤为有用。

用途

  1. 防止三维数据过拟合:通过随机地屏蔽整个通道,dropout3d 减少了模型对单个通道的依赖,从而增强了模型的泛化能力。
  2. 适用于三维特征映射:特别适用于处理三维数据,如体积医学图像或三维时间序列。

用法

output = torch.nn.functional.dropout3d(input, p=0.5, training=True, inplace=False)

其中:

  • input:输入张量
  • p:通道被零化的概率
  • training:是否在训练模式下应用 dropout3d
  • inplace:是否原地执行此操作

使用技巧

  1. 选择合适的 p 值:p 值太大可能导致信息丢失,太小则可能效果不明显。
  2. 训练和测试阶段的差异:确保在训练阶段启用 dropout3d,在测试或评估阶段关闭。
  3. 三维数据结构:确保输入数据的结构符合三维特征映射的形式。

参数

  • p(float):通道被零化的概率,默认为 0.5。
  • training(bool):如果为 True,则应用 dropout3d,默认为 True。
  • inplace(bool):如果设置为 True,则原地修改数据,默认为 False。

数学理论

dropout3d 函数在每次前向传播时,都会根据伯努利分布以概率 p 随机选择一些通道并将它们置零。不同之处在于,dropout3d 是对整个三维通道进行操作,而不是单个元素。

代码示例

import torch
import torch.nn.functional as F# 输入数据
input = torch.randn(1, 3, 8, 8, 8)  # 假设是一个具有 3 个通道的三维特征映射,每个通道是一个 8x8x8 的体积数据# 应用 dropout3d
output = F.dropout3d(input, p=0.5, training=True)print(output)  # 输出结果可能显示一些通道被完全置零

在这个例子中,我们首先定义了一个随机的三维输入张量 input,其形状为 (1, 3, 8, 8, 8),表示有 1 个样本,3 个通道,每个通道是一个 8x8x8 的体积数据。然后,我们应用了 torch.nn.functional.dropout3d 函数,并设置了 dropout 概率为 0.5。由于 training 参数设置为 True,函数将在每次前向传播时随机地选择一些通道并将它们完全置零。这种处理方式有助于在训练涉及三维空间数据的模型时减少过拟合,尤其适用于处理体积医学图像、三维扫描数据或任何涉及三维结构的场景。通过随机地屏蔽整个通道,它鼓励模型学习到更加鲁棒的三维特征表示,从而提高模型在新数据上的泛化能力和性能。在实践中,这种方法可以显著提高三维数据处理任务的准确性和可靠性。

总结

本文解析了 PyTorch 框架中的几种关键的 dropout 函数,包括 dropoutalpha_dropoutfeature_alpha_dropoutdropout1ddropout2ddropout3d。每种方法都针对不同的数据维度和网络特点,提供了有效的过拟合防止和模型正则化策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/239849.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows无法登录管理路由器故障排查

问题描述 家里的路由器使用拨号上网,路由器DHCP分发IP的范围是192.168.1.0/24。默认使用192.168.1.1管理路由器。然后拨号上网成功后,修改了私网IP的分发范围:192.168.5.1-192.168.5.10。为了防止有人蹭网,只分配的10个IP地址。修…

rust跟我学三:文件时间属性获得方法

图为RUST吉祥物 大家好,我是get_local_info作者带剑书生,这里用一篇文章讲解get_local_info是怎样获得杀毒软件的病毒库时间的。 首先,先要了解get_local_info是什么? get_local_info是一个获取linux系统信息的rust三方库,并提供一些常用功能,目前版本0.2.4。详细介绍地址…

推荐几个Github高星GoLang管理系统

在Web开发领域,Go语言(Golang)以其高效、简洁、高并发等特性逐渐成为许多开发者的首选语言。有许多优秀的Go语言Web后台管理系统,这些项目星星众多,提供了丰富的功能和良好的代码质量。本文将介绍一些GitHub高星的GoLa…

新品新品新品来袭PFA大口试剂瓶100ml

大口瓶,方便清洗,满足颗粒数要求。

excel(vab)删除空行

删除第一、二、三列位空的所有行(8000)行范围以内 代码如下: Sub Macro1()Dim hang As Integer For hang 8000 To 1 Step -1If Sheet1.Cells(hang, 1) "" And Sheet1.Cells(hang, 2) "" And Sheet1.Cells(hang, 3) "&quo…

SDRAM小项目——命令解析模块

简单介绍: 在FPGA中实现命令解析模块,命令解析模块的用来把pc端传入FPGA中的数据分解为所需要的数据和触发命令,虽然代码不多,但是却十分重要。 SDRAM的整体结构如下,可以看出,命令解析模块cmd_decode负责…

民营经济迎来新发展,创维汽车创始人黄宏生谈创业之道

2024年1月15日,上海高金金融研究院民营经济研究中心高净值研究院年度大咖论坛正式召开,多位来自不同行业的优秀民营企业家在本次论坛上分享企业的创新与发展之道。创维集团、创维汽车创始人黄宏生先生作为本次论坛的首位分享嘉宾,为其他奋斗创…

【技术分享】远程透传网关-单网口快速实现三菱 FX3U 网口PLC程序远程上下载

准备工作 一台可联网操作的电脑一台单网口的远程透传网关及博达远程透传配置工具网线一条,用于实现网络连接和连接PLC一台三菱 FX3U PLC及其编程软件一张4G卡或WIFI天线实现通讯(使用4G联网则插入4G SIM卡,WIFI联网则将WIFI天线插入USB口) …

Docker部署Traefik结合内网穿透远程访问Dashboard界面

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件,能轻易的部署微服务。它支持多种后端 (D…

P9852 [ICPC2021 Nanjing R] Windblume Festival 题解(SPJ)

[ICPC2021 Nanjing R] Windblume Festival 单击此处下载原神 题面翻译 给一个长度为 n n n 环形整数序列 a a a, 每次操作可以任意选择一个下标 x x x,令 $ a_x a_x - a_{(x\bmod n)1}$,之后移除 a ( x m o d n ) 1 a_{(x\bmod n)1} a(xmodn)1​…

MDT的驱动管理和自动匹配

在企业的生产环境中,我们经常会遇到在一个公司中,有很多电脑不是同一个品牌的。有DELL, Lenovo等等诸多品牌。 如果是在小的企业或者组织里,计算机型号单一,我们就可以直接导入驱动,然后直接部署到系统里。…

探索Vue3:深入理解响应式语法糖

🚀 欢迎来到我的专栏!专注于Vue3的实战总结和开发实践分享,让你轻松驾驭Vue3的奇妙世界! 🌈✨在这里,我将为你呈现最新的Vue3技术趋势,分享独家实用教程,并为你解析开发中的难题。让我们一起深入Vue3的魅力,助力你成为Vue大师! 👨‍💻💡不再徘徊,快来关注…

代码随想录算法训练营第三十六天|435. 无重叠区间、763.划分字母区间、56. 合并区间

题目&#xff1a;435. 无重叠区间 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:435.无重叠区间 题目链接&#xff1a;力扣题目链接 图释&#xff1a; class Solution { public:static bool cmp(const vector<int>&a, const vector<int>…

Oracle篇—实例中和name相关参数的区别和作用

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

计算机导论07-算法和数据结构

文章目录 算法基础算法及其特性算法的概念算法与程序算法表示 算法的描述自然语言流程图盒图&#xff08;N-S图&#xff09;伪代码程序设计语言 算法评价算法的衡量标准算法的规模时间复杂度空间复杂度 数据结构数据结构的概念数据的逻辑结构数据的存储结构数据的基本操作 常用…

❤ React报错问题分析

❤ React报错问题分析 ❤️ You passed a second argument to root.render(…) but it only accepts one argument. You passed a second argument to root.render(…) but it only accepts one argument. react-dom.development.js:86 Warning: You passed a second argumen…

drools开源规则引擎介绍以及在Centos上的具体部署方案,让你的业务规则能够独立于应用程序本身

Drools是一个基于Java的开源规则引擎&#xff0c;用于处理业务规则和复杂事件处理。它提供了一个声明性的规则语言&#xff0c;允许开发人员定义业务规则&#xff0c;并通过引擎执行这些规则。以下是Drools规则引擎的简介和一些应用场景描述。 Drools规则引擎简介 规则引擎概述…

Apache StringUtils:Java字符串处理工具类

简介 在我们的代码中经常需要对字符串判空&#xff0c;截取字符串、转换大小写、分隔字符串、比较字符串、去掉多余空格、拼接字符串、使用正则表达式等等。如果只用 String 类提供的那些方法&#xff0c;我们需要手写大量的额外代码&#xff0c;不然容易出现各种异常。现在有…

还在为crontab表达式发愁吗,快使用这个工具

是不是每次要定义cron表达式的时候&#xff0c;都去百度翻找资料&#xff0c;cron表达式难写难记真是苦天下程序员久已。有没有什么不拥记的办法就轻松掌握呢&#xff1f;最近发现这个CrontabGuru神器&#xff0c;强烈推荐&#xff0c;真是广大程序员的福音了。 简介 Crontab…

车载音频EMI的产生及典型音频功放AW836XX的解决方案

之前针对 eCall的文章中有提到D类音频功放需要关注EMI问题&#xff08;点击文章回看《车载eCall系统音频应用解决方案》&#xff09;&#xff0c;在此展开此问题并寻求解决方案。 1. EMI定义与分类 电磁干扰&#xff08;Electromagnetic Interference&#xff0c;EMI&#xff…