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.mzph.cn/news/629350.shtml

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

相关文章

SQL实践:利用tag检索文件的多种情况讨论(二)

在上一篇文章SQL实践:利用tag检索文件的多种情况讨论中,我们介绍了在使用外键的方式为数据关联tag后,如何筛选: 如何筛选包含某一个tag的数据如何筛选包含且只包含某一个tag的数据如何筛选包含多个指定tag的数据 这篇文章主要是…

eNSP学习——终端直连三层网关设备进行通信

VLAN 配置 一 . 功能简介 将设备中的某些接口定义为一个单独的区域,将指定接口加入到指定 VLAN 中之后,接口就可以转发 指定 VLAN 报文。从而实现 VLAN 内的主机可以直接通信,而 VLAN 间的主机不能直接互通,将广播报文 …

element-ui tree树形结构全选、取消全选,展开收起

控制树形结构全选、取消全选&#xff0c;展开收起 <template><div><!-- 添加 ref"tree" 属性--><el-tree:data"data"show-checkboxdefault-expand-allnode-key"id"ref"tree"highlight-current:props"defa…

详解SpringCloud微服务技术栈:Feign远程调用、最佳实践、错误排查

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;详解SpringCloud微服务技术栈&#xff1a;Nacos配置管理 &#x1f4da;订阅专栏&#xff1a;微服务技术全家桶 希望文章对你们有…

蓝桥杯青少年创意编程大赛:激发少儿编程潜能,培养未来科技之星

随着科技的飞速发展&#xff0c;编程已经成为了当今世界的一项重要技能。为了培养更多的编程人才&#xff0c;蓝桥杯官网显示&#xff0c;蓝桥杯青少年创意编程大赛应运而生。作为国内有影响力的少儿编程赛事之一&#xff0c;蓝桥杯青少年创意编程大赛旨在激发青少年对编程的兴…

​Portkey AI网关:一个用来连接多种人工智能模型的开源工具

简介 它允许开发者通过一个简单的API接口来访问超过100种不同的大语言模型。包括OpenAI、Anthropic、Mistral、LLama2、Anyscale、Google Gemini等。安装体积只有45kb&#xff0c;处理速度提升了9.9倍&#xff0c;可以在多个不同的AI模型中来回切换。可以根据自己的需要进行灵…

找不到mfc100.dll的解决方法,怎么修复mfc100.dll文件

当我们在使用电脑时&#xff0c;时常可能会遇到各类系统提示的错误信息。"找不到mfc100.dll" 就是这些错误之一&#xff0c;该错误提示会妨碍我们执行一些应用程序或特定代码。为了帮助读者克服这个技术障碍&#xff0c;本篇文章将详尽阐明导致该问题的根本原因&…

【Flutter 问题系列第 80 篇】TextField 输入框组件限制可输入的最大长度后,输入的内容中包含表情符号时,获取输入的内容数还是会超出限制的问题

这是【Flutter 问题系列第 80 篇】&#xff0c;如果觉得有用的话&#xff0c;欢迎关注专栏。 博文当前所用 Flutter SDK&#xff1a;3.10.5、Dart SDK&#xff1a;3.0.5 一&#xff1a;问题描述 在输入用户名称、简介等内容时&#xff0c;一般我们都会限制输入框内最大可输入…

FFMPEG解码实时流,支持cpu、gpu解码

官网下载的ffmpeg目前只能下载到X64版本的库&#xff0c;具体编译请参考windows编译ffmpeg源码&#xff08;32位库&#xff09;_windows 32位ffmpeg动态库-CSDN博客 直接上代码 int VideoDecodeModule::Open(std::string strUrl) {AVFormatContext *pFormatCtx nullptr;AVCo…

电脑本地连接不见了怎么恢复?5个方法轻松解决问题!

“我在使用电脑时&#xff0c;突然发现我的本地连接不见了&#xff0c;这是怎么回事呢&#xff1f;有什么方法可以解决这个问题吗&#xff1f;” 电脑的本地连接是一种将电脑与局域网连接的方式。局域网是一种小型的网络&#xff0c;通常在建筑物内或地理位置相近的少量计算机之…

Python数据分析案例33——新闻文本主题多分类(Transformer, 组合模型) 模型保存

案例背景 对于海量的新闻&#xff0c;我们可能需要进行文本的分类。模型构建很重要&#xff0c;现在对于自然语言处理基本都是神经网络的方法了。 本次这里正好有一组质量特别高的新闻数据&#xff0c;涉及 教育 科技 社会 时政 财经 房产 家居 七大主题&#xff0c;基本涵盖…

Grafana(三)Grafana 免密登录-隐藏导航栏-主题变换

一. 免密登录 Grafana 的常用方式&#xff1a; 将配置好的Grafana图嵌入到系统页面中 为了实现可免登录访问&#xff0c;可以通过如下方式进行设置&#xff1a; 1. 修改Grafana配置文件 在Grafana的配置文件 /etc/grafana/grafana.ini 中&#xff0c;找到 [auth.anonymous] 配…

P9842 [ICPC2021 Nanjing R] Klee in Solitary Confinement 题解(SPJ!!!)

[ICPC2021 Nanjing R] Klee in Solitary Confinement 题面翻译 给定 n , k n,k n,k 和一个长为 n n n 的序列&#xff0c;你可以选择对区间 [ l , r ] [l, r] [l,r] 的数整体加上 k k k&#xff0c;也可以不加。最大化众数出现次数并输出。 题目描述 Since the travele…

MySQL命令大全和实例

文章目录 1. 数据库管理2. 表操作3. 数据操作&#xff08;CRUD&#xff09;4. 条件查询与排序5. 聚合函数和分组6. 用户权限管理7. 其他操作8. 视图操作9. 索引操作10. 子查询与连接查询11. 插入多行数据12. 删除满足特定条件的表中所有数据13. 清空表&#xff08;保留表结构&a…

rust跟我学五:是否安装双系统

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

IOS-高德地图路径绘制显示交通状况-Swift

本文基于&#xff1a;高德地图路径绘制进行了路径绘制的优化&#xff0c;添加了根据交通信息&#xff08;是否拥堵&#xff09;来显示路况&#xff0c;效果如图&#xff1a; 图标资源&#xff1a; custtexture_bad custtexture_green custtexture_slow custtexture_serio…

关于C语言整型提升的讲解

目录 1.什么是整型提升 2.整型提升的意义 3.整型提升是怎么提升的 4.整型提升的实例 1.什么是整型提升 C语言中的整型算术运算总是以缺省&#xff08;默认&#xff09;整型类型的精度来进行的。为了获得这个精度&#xff0c;表达式中的字符和短整型操作数在使用之前会被转换…

web练习2

需求 1.计算用户指定的数值内的奇数和。例如用户输入的是10则计算13579的和 <!doctype html> <html lang"en"> <head><meta charset"utf-8"><title>作业1</title></head> <body> <script>//计算用…

使用 Python 创造你自己的计算机游戏(游戏编程快速上手)第四版:第十五章到第十八章

十五、反转棋游戏 原文&#xff1a;inventwithpython.com/invent4thed/chapter15.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 在本章中&#xff0c;我们将制作反转棋&#xff0c;也称为黑白棋或奥赛罗。这个双人棋盘游戏是在网格上进行的&#xff0c;因此我们…

2024“华数杯”(A题)放射性 Tritium 污染问题国际大学生数学建模竞赛| 建模秘籍文章代码思路大全

铛铛&#xff01;小秘籍来咯&#xff01; 小秘籍希望大家都能轻松建模呀&#xff0c;华数杯也会持续给大家放送思路滴~ 抓紧小秘籍&#xff0c;我们出发吧~ 完整内容可以在文章末尾领取&#xff01; 问题重述&#xff1a; 2024 “Huashu Cup” 国际数学建模大赛 - Proble…