2--丢弃法(Dropout)

2023-10-21 14:40
文章标签 dropout 丢弃

本文主要是介绍2--丢弃法(Dropout),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2.1 丢弃法

         在训练过程中,在计算后续层之前向网络的每一层注入噪声。 因为当训练一个有多层的深层网络时,注入噪声只会在输入-输出映射上增强平滑性,该思想称为丢弃法。

        丢弃法在前向传播过程中,计算每一内部层的同时注入噪声,这已经成为训练神经网络的常用技术。 这种方法之所以被称为丢弃法,因为从表面上看是在训练过程中丢弃(drop out)一些神经元。 在整个训练过程的每一次迭代中,标准丢弃法包括在计算下一层之前将当前层中的一些节点置零。

        在标准丢弃法正则化中,通过按保留(未丢弃)的节点的分数进行规范化来消除每一层的偏差。 换言之,每个中间活性值h以暂退概率p由随机变量h′替换,如下所示(并且其期望值保持不变,即E[h′]=h):

 注意:通常,在测试时不用暂退法。 给定一个训练好的模型和一个新的样本,我们不会丢弃任何节点,因此不需要标准化。

2.2 代码实现

!pip install git+https://github.com/d2l-ai/d2l-zh@release  # installing d2l
!pip install matplotlib==3.0.0import torch
from torch import nn
from d2l import torch as d2ldef dropout_layer(X,dropout):assert 0 <= dropout <= 1if dropout == 1:return torch.zeros_like(X)if dropout == 0:return Xmask = (torch.rand(X.shape)>dropout).float()#当随机生成的数字大于dropout是 返回1 反之返回0return mask * X / (1.0- dropout)dropout1, dropout2 = 0.2, 0.5
num_inputs, num_outputs, num_hiddens1, num_hiddens2 = 784, 10, 256, 256class Net(nn.Module):def __init__(self, num_inputs, num_outputs, num_hiddens1, num_hiddens2,is_training = True):super(Net, self).__init__()self.num_inputs = num_inputsself.training = is_trainingself.lin1 = nn.Linear(num_inputs, num_hiddens1)self.lin2 = nn.Linear(num_hiddens1, num_hiddens2)self.lin3 = nn.Linear(num_hiddens2, num_outputs)self.relu = nn.ReLU()def forward(self, X):H1 = self.relu(self.lin1(X.reshape((-1, self.num_inputs))))# 只有在训练模型时才使用dropoutif self.training == True:# 在第一个全连接层之后添加一个dropout层H1 = dropout_layer(H1, dropout1)H2 = self.relu(self.lin2(H1))if self.training == True:# 在第二个全连接层之后添加一个dropout层H2 = dropout_layer(H2, dropout2)out = self.lin3(H2)return outnet = Net(num_inputs, num_outputs, num_hiddens1, num_hiddens2)from re import L
num_epochs, lr, batch_size = 10, 0.5, 256
loss = nn.CrossEntropyLoss(reduction='none')
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
trainer = torch.optim.SGD(net.parameters(),lr=lr)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)

运行结果: 

将dropout设置为0 即使用正常的完整的网络进行训练,此时有过拟合的可能,可以看出还是使用dropout的效果好一点:

 当两层的dropout概率为1时,即全丢弃的时候。

这篇关于2--丢弃法(Dropout)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/255033

相关文章

深度学习100问49:基于Dropout的方法有哪些

嘿,朋友!来看看这些超酷的基于 Dropout 的方法吧。   一、标准 Dropout——让神经元“玩捉迷藏”   想象一下,神经网络就像一个热闹的游乐场,里面有很多好玩的游乐设施(神经元)。标准 Dropout 呢,就像是一个调皮的小精灵,它会时不时地蒙上一些游乐设施的眼睛,让它们暂时不能工作。这样其他游乐设施就得更努力地玩,不能只靠那几个被蒙住眼睛的。这样整个游乐场(神经网络)就会变得更有趣

人工智能:模型复杂度、模型误差、欠拟合、过拟合/泛化能力、过拟合的检测、过拟合解决方案【更多训练数据、Regularization/正则、Shallow、Dropout、Early Stopping】

人工智能:模型复杂度、模型误差、欠拟合、过拟合/泛化能力、过拟合的检测、过拟合解决方案【更多训练数据、Regularization/正则、Shallow、Dropout、Early Stopping】 一、模型误差与模型复杂度的关系1、梯度下降法2、泛化误差2.1 方差2.2 偏差2.3 噪声2.4 泛化误差的拆分 3、偏差-方差窘境(bias-variance dilemma)4、Bias

Pytorch实现多层LSTM模型,并增加emdedding、Dropout、权重共享等优化

简述 本文是 Pytorch封装简单RNN模型,进行中文训练及文本预测 一文的延申,主要做以下改动: 1.将nn.RNN替换为nn.LSTM,并设置多层LSTM: 既然使用pytorch了,自然不需要手动实现多层,注意nn.RNN和nn.LSTM 在实例化时均有参数num_layers来指定层数,本文设置num_layers=2; 2.新增emdedding层,替换掉原来的nn.funct

【算法学习笔记】29:动态规划中可丢弃状态的维度压缩

1 动机 当状态 i i i只依赖于前置状态 i − 1 i - 1 i−1,并且在计算出状态 i i i之后就可以丢弃状态 i − 1 i - 1 i−1时的解时, i − 1 i - 1 i−1就成为一个可丢弃的状态,因此就可以将 i i i这个维度直接压缩(省略)掉,用一个变量不停的更新自己就可以了,可以直接节省一个维度的空间占用。 2 例题 2.1 LC1955. 统计特殊子序列的数

DL基础补全计划(四)---对抗过拟合:权重衰减、Dropout

PS:要转载请注明出处,本人版权所有。 PS: 这个只是基于《我自己》的理解, 如果和你的原则及想法相冲突,请谅解,勿喷。 环境说明 Windows 10VSCodePython 3.8.10Pytorch 1.8.1Cuda 10.2 前言   在《DL基础补全计划(三)—模型选择、欠拟合、过拟合》( https://blog.csdn.net/u011728480/article/d

Caffe Prototxt 特征层系列:Dropout Layer

Dropout Layer作用是随机让网络的某些节点不工作(输出置零),也不更新权重;是防止模型过拟合的一种有效方法 首先我们先看一下 DropoutParameter message DropoutParameter {optional float dropout_ratio = 1 [default = 0.5]; // dropout ratio } InnerProduct l

从零实现ChatGPT:第二章备使用注意力Dropout减少过拟合

准备深入学习transformer,并参考一些资料和论文实现一个大语言模型,顺便做一个教程,今天是第二部分。 本系列禁止转载,主要是为了有不同见解的同学可以方便联系我,我的邮箱 fanzexuan135@163.com 使用注意力Dropout减少过拟合 在上一节中,我们通过在注意力权重矩阵中应用因果注意力掩码,实现了因果注意力机制。除了因果注意力掩码之外,我们还可以添加一个Dropout掩码

【深度学习笔记3.2 正则化】Dropout

关于dropout的理解与总结: dropout是什么?参考文献[1]dropout会让train变差,让test变好。一般的如果在train-set上表现好,在test-set上表现差,用dropout才有效果。使用dropout是为了避免过拟合。(来自网友)下图来自文献[3]   上图中的思想就是说:Dropout是一种正则化技术,是防止过拟合最有效的方法,然而在以下几种情况下使用drop

【深度学习】之 卷积(Convolution2D)、最大池化(Max Pooling)和 Dropout 的NumPy实现

1. 2D 卷积操作 import numpy as npdef conv2d(image, kernel, stride=1, padding=0):"""应用2D卷积操作到输入图像上。参数:- image: 输入图像,2D数组。- kernel: 卷积核,2D数组。- stride: 卷积步幅。- padding: 图像周围的零填充数量。返回值:- output: 卷积操作的结果。"""#

正则化和dropout

1. 过拟合 先来说说什么是过拟合,在Andrew Ng的ML课程中有这么一段描述。 使用一次曲线拟合房价,发现效果并不好,出现欠拟合,是high bias,训练数据不够充分。使用二次曲线拟合房价,刚好合适。使用高阶曲线拟合,每个点都很完美,这时过拟合出现了,产生了high variance,过度训练数据,使得泛化性能很差。用Bengio在Deep Learning中的这个图来阐述什么是过拟合