首页 > 其他分享 >Keras Dropout

Keras Dropout

时间:2023-10-08 09:33:05浏览次数:31  
标签:... Keras Dropout 神经网络 正则 model 神经元

===============================================================

 一、Keras 中使用 Dropout 正则化减少过度拟合

Dropout正则化是最简单的神经网络正则化方法。其原理非常简单粗暴:任意丢弃神经网络层中的输入,该层可以是数据样本中的输入变量或来自先前层的激活。它能够模拟具有大量不同网络结构的神经网络,并且反过来使网络中的节点更具有鲁棒性。

阅读完本文,你就学会了在Keras框架中,如何将深度学习神经网络Dropout正则化添加到深度学习神经网络模型里,具体内容如下:如何使用Keras API创建Dropout层;如何使用Keras API将Dropout正则化添加到MLP、CNN和RNN层;在现有模型中,如何使用Dropout正则化减少过拟合。
Keras中的Dopout正则化

在Keras深度学习框架中,我们可以使用Dopout正则化,其最简单的Dopout形式是Dropout核心层。

在创建Dopout正则化时,可以将 dropout rate的设为某一固定值,当dropout rate=0.8时,实际上,保留概率为0.2。下面的例子中,dropout rate=0.5。

layer = Dropout(0.5)

Dropout层

将Dropout层添加到模型的现有层和之前的输出层之间,神经网络将这些输出反馈到后续层中。用dense()方法指定两个全连接网络层:

    ...
    model.append(Dense(32))
    model.append(Dense(32))
    ...

在这两层中间插入一个dropout层,这样一来,第一层的输出将对第二层实现Dropout正则化,后续层与此类似。现在,我们对第二层实现了Dropout正则化。

    ...
    model.append(Dense(32))
    model.append(Dropout(0.5))
    model.append(Dense(32))
    ...

Dropout也可用于可见层,如神经网络的输入。在这种情况下,就要把Dropout层作为网络的第一层,并将input_shape参数添加到层中,来制定预期输入。

    ...
    model.add(Dropout(0.5, input_shape=(2,)))
    ...

下面,我们来看看Dropout正则化如何与常见的网络类型一起使用。
MLP Dropout正则化

在两个全连接层之间添加Dropout正则化,代码如下所示:

    # example of dropout between fully connected layers
    from keras.layers import Dense
    from keras.layers import Dropout
    ...
    model.add(Dense(32))
    model.add(Dropout(0.5))
    model.add(Dense(1))
    ...

CNN Dropout正则化

我们可以在卷积层和池化层后使用Dropout正则化。一般来说,Dropout仅在池化层后使用。

    # example of dropout for a CNN
    from keras.layers import Dense
    from keras.layers import Conv2D
    from keras.layers import MaxPooling2D
    from keras.layers import Dropout
    ...
    model.add(Conv2D(32, (3,3)))
    model.add(Conv2D(32, (3,3)))
    model.add(MaxPooling2D())
    model.add(Dropout(0.5))
    model.add(Dense(1))
    ...

 链接:https://blog.csdn.net/yangwohenmai1/article/details/123346240

===============================================================

了解Dropout

神经网络在其输入和输出层之间具有隐藏层,这些隐藏层中嵌入了神经元,神经元内的权重以及神经元之间的连接使得神经网络系统能够模拟学习过程。

简单神经网络

一般的观点是,神经网络体系结构中的神经元和层越多,其表示能力就越强。表示能力的提高意味着神经网络可以拟合更复杂的函数,并可以更好地泛化到训练数据。

 

复杂神经网络

越深的神经网络越容易过度拟合。过度拟合是一个常见问题,它的定义是:模型在训练数据上表现良好,但经过训练的机器学习模型无法很好地泛化到不看见的数据。

Dropout的主要目的是使网络中过度拟合的影响最小化。

Dropout技术是通过随机减少神经网络中相互连接的神经元的数量来实现的。在每一个训练步骤中,每个神经元都有可能被排除在外(从连接的神经元中被剔除)。在某种意义上,层内的神经元学习的权重值不是基于其相邻神经元的协作。

假设你训练了7000个不同的神经网络结构,为了选出最好的一个神经网络体系结构,你只需要取这7000个训练过的神经网络的平均值。

实际上,我们在每个训练步骤中都在训练各种不同的网络(因为在任何两个训练步骤中都不可能排除相同的神经元),因此,使用dropout技术训练的神经网络是在每个训练步骤中的所有不同神经元连接组合的平均值。

实际场景

在实际场景中,或者在测试训练神经网络的性能时,需要考虑以下两点:

1、实际上并不是在神经网络的每个层上都实现了Dropout技术,它通常在神经网络的最后几层被使用。

在CIFAR-10机器学习数据集上进行测试时,如果在最后一个隐藏层中使用了Dropout,则错误率为15.6%。当相同的数据集在相同的卷积神经网络上进行测试(任何一层中均未包含dropout技术)时,错误率为16.6%,相比之下,这是一个进步。

 

 

2、评估训练过的神经网络时不会使用Dropout。由于在评估或测试阶段未使用Dropout,因此神经网络可以充分发其潜力,这意味着网络中的所有神经元都处于活动状态,每个神经元的输入连接都比训练时多。

 https://baijiahao.baidu.com/s?id=1667213407197650339&wfr=spider&for=pc

===============================================================

 

几个建议

1.dropout在0.2~0.5之间,一般0.2就挺好的

2.input也可以用,不止是hiddenlayer

3. Use a larger network. You are likely to get better performance when dropout is used on a larger network, giving the model more of an opportunity to learn independent representations.
4. Use a large learning rate with decay and a large momentum. Increase your learning rate by a factor of 10 to 100 and use a high momentum value of 0.9 or 0.99.
5. Constrain the size of network weights. A large learning rate can result in very large network weights. Imposing a constraint on the size of network weights such as max-norm regularization with a size of 4 or 5 has been shown to improve results

 

http://www.manongjc.com/article/38261.html

===============================================================

 

标签:...,Keras,Dropout,神经网络,正则,model,神经元
From: https://www.cnblogs.com/emanlee/p/17090132.html

相关文章

  • keras.layers. K.function 用法(keras提取中间层的输出)
    https://www.laike.net/article-11-295083-0.html 使用K.function()调试keras操作Keras的底层库使用Theano或TensorFlow,这两个库也称为Keras的后端。无论是Theano还是TensorFlow,都需要提前定义好网络的结构,也就是常说的“计算图”。在运行前需要对计算图编译,然后才能输出结果......
  • 解决tansorflow新手教程的keras.datasets数据下载问题
    portal>https://github.com/tensorflow/tensorflow/issues/33285......
  • Dropout程序
    1#coding:utf-82importnumpyasnp34#dropout函数的实现5defdropout(x,level):6iflevel<0.orlevel>=1:#level是概率值,必须在0~1之间7raiseValueError('Dropoutlevelmustbeininterval[0,1[.')8retain_prob=1......
  • "deepleraning.ai" study Notes P52 53 Dropout
    #reasonwhydropoutcouldresolveoverfitting##thefirst: smallerneuralnetworkseemslikeitshouldhavearegularizingeffect(P52)##thesecond:theperspectiveofasingleunit *theunits'job利用输入单元生成有意义的输出*因为有些输入神经元会......
  • 无涯教程-TensorFlow - Keras
    Keras易于学习的高级Python库,可在TensorFlow框架上运行,它的重点是理解深度学习技术,如为神经网络创建层,以维护形状和数学细节的概念。框架的创建可以分为以下两种类型-顺序API功能API无涯教程将使用JupyterNotebook执行和显示输出,如下所示-步骤1  - 首先执行数据加载和......
  • 安装nlpcda2.5.8 Simbert不能正常使用,除非你安装:bert4keras、tensorflow ,为了
    安装nlpcda2.5.8Simbert不能正常使用问题解决方案在自然语言处理(NLP)领域,模型的选择和安装是非常重要的。为了使用nlpcda2.5.8Simbert,我们需要在安装该库之前先安装bert4keras和tensorflow。本文将介绍如何解决Simbert不能正常使用的问题,并给出相应的代码示例。1.安装bert4kera......
  • torch.nn.Linear 和 torch.nn.Dropout
    torch.nn.Linear torch.nn.Linear是PyTorch中的一个线性层,它实现了一个全连接层,即输入和输出之间的每个神经元都连接到彼此。它的构造函数接受两个参数:输入特征的数量和输出特征的数量。例如,如果你想要将一个长度为100的输入向量映射到一个长度为10的输出向量,可以使用以下代码创建......
  • 使用Keras Tuner进行超参数自动调优
    本文将使用Tensorflow中包含的FashionMNIST数据集。该数据集在训练集中包含60,000张灰度图像,在测试集中包含10,000张图像。每张图片代表属于10个类别之一的单品(“T恤/上衣”、“裤子”、“套头衫”等)。因此这是一个多类分类问题。首先我们需要安装keras_tuner,它将......
  • 4.6 暂退法(丢弃法)dropout
    1.dropout为什么会出现dropout?实际上是基于这样一个目的:我们的模型需要对输入具有扰动鲁棒性,即输入带有一些噪音时,好的模型也应该能够正确的完成任务。比如,下面这张盔甲的图片,它被一定程度模糊时,也应该能辨认出它是一个盔甲: 已经有人在数学上证明:使用有噪音的数据等价于Tikho......
  • Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化|附代码数据
    原文链接:http://tecdat.cn/?p=23573最近我们被客户要求撰写关于Keras神经网络序列模型的研究报告,包括一些图形和统计输出。我们可以很容易地用Keras序列模型拟合回归数据并预测测试数据。  在这篇文章中,我们将简要地学习如何用Python中的Keras神经网络API拟合回归数据。我们将......