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。每种方法都针对不同的数据维度和网络特点,提供了有效的过拟合防止和模型正则化策略。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每日一记:一个windows的bat脚本工具集

最近在工作上遇到要校验文件的问题,例如,下载了一个文件之后,通过查看文件的md5来校验文件是否完整,这个动作在linux上很简单,但在windows上也不难,可以通过 certutil 命令实现,该命令通常可用于…

vue流程图

效果图 组件 <template><div class="processBox" v-if="list.length"><div class="childs"><div class="child" v-for="(item,index) in list" :key="item.id +-child-+index"><div…

指定Top名校|管理学教师拜师香港理工大学院士麾下访学

X老师拟自费赴香港访学&#xff0c;并指定了香港Top5之内的高校。申请一个月后&#xff0c;我们落实了香港理工大学的访学职位&#xff0c;导师为香港工程科学院和国际系统与控制科学院的两院院士、讲座教授。 X老师背景&#xff1a; 申请类型&#xff1a;自费访问学者 工作背…

迷你洗衣机哪个牌子好用?家用小型洗衣机推荐

迷你洗衣机主要分为立式洗衣机、壁挂式洗衣机&#xff0c;在特定的情况下是能够为用户提供一定的方便的。就好比如说宝宝的衣物需要和大人的分开洗&#xff0c;或者我们日常都所要清洗内衣裤、袜子等等这些贴身的衣物&#xff0c;直接将这些小件的衣物放进到迷你洗衣机中分类单…

2024“华数杯”国际赛(B题ICM)|光伏发电|国际大学生数学建模竞赛建模解析,小鹿学长带队指引全代码文章与思路

我是小鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮200人完成了建模与思路的构建的处理了&#xff5e; 完整内容可以在文章末尾领取&#xff01; 问题重述 这个问题涉及创建一个数学模型&#xff0c;以解决与光伏发电和中国电力供应相关的各个方面。 电…

计算机网络-甘晴void学习笔记

计算机网络 计科210X 甘晴void 202108010XXX 文章目录 计算机网络期中复习1计算机网络和因特网1.1 因特网1.2 网络边缘1.3 网络核心1.4 分组交换的时延/丢包和吞吐量1.5 协议层次与服务模型 2 应用层原理2.1 应用层协议原理2.2 Web和Http2.3 因特网中的电子邮件2.4 DNS&#x…

史星海先生入选 2024中英双语版《世界名人录》【综合22卷·文化卷】(中国)

史星海(中国) Shi Xinghai (China) 经海内外各界名人及世界相关权威文化机构的大力举荐&#xff0c;鉴于史星海先生在国内外文艺&#xff0c;经济&#xff0c;政治等领域的重大影响力&#xff0c;荣幸获得入编大型人物辞书2024中英双语版《世界名人录》&#xff08;综合卷文化…

Open CASCADE学习|显示模型

目录 1、编写代码 Viewer.h Viewer.cpp ViewerInteractor.h ViewerInteractor.cpp helloworld.cpp 2、配置 3、编译运行 1、编写代码 Viewer.h #pragma once ​ #ifdef _WIN32 #include <Windows.h> #endif ​ // Local includes #include "ViewerInteract…

各省快递量数据, shp+excel,2001-2021年,已实现数据可视化

基本信息. 数据名称: 各省快递量数据 数据格式: shpexcel 数据时间&#xff1a;2001-2021年 数据几何类型: 面 数据坐标系: WGS84 数据来源&#xff1a;网络公开数据 数据字段&#xff1a; 序号字段名称字段说明1a_2001快递量/万件_2001年2a_2002快递量/万件_2002年3…

热压机PLC数据采集远程监控物联网解决方案

热压机PLC数据采集远程监控物联网解决方案 随着工业4.0时代的到来&#xff0c;智能制造已经成为制造业发展的重要方向。在热压机领域&#xff0c;PLC数据采集远程监控物联网解决方案为提高生产效率、降低维护成本、优化生产工艺提供了有效的手段。 一、热压机PLC数据采集远程…

一文带你揭秘淘宝终端技术

作者&#xff1a;周杰&#xff08;寻弦&#xff09; 在这个数字化迅速发展的时代&#xff0c;技术的每一次飞跃都不仅仅意味着一个产品的升级&#xff0c;更是对未来世界的一次大胆想象。从 PC 到 iPhone&#xff0c;从 Model 3 到 ChatGPT&#xff0c;都引领了全新的一个行业。…

Linux miniGUI移植分析

框架介绍 常用GUI程序对比 https://www.cnblogs.com/zyly/p/17378659.html MiniGUI分为底层的GAL&#xff08;图形抽象层&#xff09;和IAL&#xff08;输入抽象层&#xff09;&#xff0c;向上为基于标准POSIX接口中pthread库的Mini-Thread架构和基于Server/Client的Mini-L…

护眼灯有没有护眼的效果啊?有效果的护眼灯推荐

近几年&#xff0c;青少年近视人数呈现猛增的势头&#xff0c;且低龄化趋势也越来越明显&#xff0c;社会各界开始重视对青少年视力问题的关注。伤害视力的原因有很多种&#xff0c;其中没有良好的光线条件是问题之一&#xff0c;当使用的台灯不合格&#xff0c;频闪与蓝光问题…

渗透测试(12)- WireShark 网络数据包分析

目录 1、WireShack 简介 2、WireShark 基本使用方法 3、 WireShack 抓包分析 3.1 Hypertext Transfer Protocol (应用层) 3.2 Transmission Control Protocol (传输层) 3.3 Internet Protocol Version 4(网络层) 3.4 Ethernet Il (链路层): 数据链路层以太网头部信息 …

ZooKeeper 实战(五) Curator实现分布式锁

文章目录 ZooKeeper 实战(五) Curator实现分布式锁1.简介1.1.分布式锁概念1.2.Curator 分布式锁的实现方式1.3.分布式锁接口 2.准备工作3.分布式可重入锁3.1.锁对象3.2.非重入式抢占锁测试代码输出日志 3.3.重入式抢占锁测试代码输出日志 4.分布式非可重入锁4.1.锁对象4.2.重入…

数据结构之串|数组|广义表

串 数组 广义表 总结&#xff1a;

【JS逆向学习】1号店

逆向目标 接口&#xff1a;https://passport.yhd.com/publicPassport/login.do加密参数&#xff1a; credentials.usernamecredentials.password 逆向过程 老规矩&#xff0c;输入用户名和密码&#xff0c;点击登录&#xff0c;然后过滤 XHR 请求 进入 Initiator 随便找个…

计算机毕业设计------SSH新闻资讯网站管理系统

项目介绍 该系统分成两个项目&#xff0c;前台项目与后台项目&#xff0c;需要分别运行&#xff1b; 后台管理员角色包含以下功能&#xff1a; 管理员登录,新闻专题类别管理,友情链接管理,广告管理,新闻列表管理,管理员管理,信息修改等功能。 前台用户角色包含以下功能&#…

逸学Docker【java工程师基础】1.认识docker并且安装

场景问题 在实际开发过程中我们有这样的场景问题 在开发阶段的环境配置到了其他人项目人员那里就不能运行了&#xff0c;尽管配置规格相同&#xff0c;但是在较多的不同的环境情况下还是可能会有错误。 开发&#xff1a;程序员&#xff1a;你那边可以运行了吗 测试&#xf…

JUC的常见类

目录 Callable ReentrantLock Semaphore CountDownLatch JUC即 java.util.concurrent&#xff0c;其中存放了一些进行多线程编程时有用的类 Callable Callable是一个接口&#xff0c;在我们实现Runnable创建线程时&#xff0c;Runnable关注的是其过程&#xff0c;而不关注…