问题标签 [dropout]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
pytorch - 在 pytorch RNN 中的时间步之间添加 dropout
我正在训练内置的 pytorch rnn 模块(例如,torch.nn.LSTM),并希望在每个时间步之间添加固定的每小批量丢失(如果我理解正确,Gal 丢失)。
最简单的是,我可以展开网络并在单个批次上计算我的前向计算,如下所示:
但是,假设 python 中的循环非常慢,我宁愿利用 pytorch 的能力来完全处理一批多个序列,一次调用(如rnn(batch,state)
常规前向计算)。
即,我更喜欢看起来像这样的东西:
(注意:Pytorch 的 rnns 确实有一个dropout
参数,但它是用于层之间的辍学而不是时间步长之间的,所以不是我想要的)。
我的问题是:
我是否正确理解 Gal 辍学?
我想要的界面是否可用?
如果不是,是否会简单地实现一些
drop_neurons(rnn), return_dropped(rnn)
函数,将 rnn 的权重矩阵和偏置向量中的随机行归零,然后在更新步骤之后返回它们之前的值是否等效?(这会在层之间施加与步骤之间相同的丢失,即完全删除整个小批量的一些神经元,我不确定这样做是否“正确”)。
python - Keras Dropout 卷积滤波器
我知道dropout 对神经网络的卷积滤波器内核的影响与对 FC 层的影响不同:
但是,如果您放弃整个过滤器,同样的事实是否适用?
让我们假设一个网络结构,如:Input、Conv2D、Conv2D、...、Conv2D、Conv2D、Sigmoid。所以整个网络中没有全连接层。
问题1 应用conv filter dropouts来避免filter之间的co-adaptation来提高filter可视化的结果是否合理。
问题 2 有没有一种快速的方法在 keras 中做 dropout 过滤器。
python - 辍学是否适用于 Keras 中的正则化项?
我有一个自定义的正则化术语my_reg
。
是否Dropout(0.5)
也适用于my_reg
培训过程中?如果不是,我怎样才能使它成为真的?提前致谢!
machine-learning - 反转 dropout 如何补偿 dropout 的影响并保持预期值不变?
我正在从deeplearning.ai
课程中学习神经网络中的正则化。在 dropout 正则化中,教授说如果应用了 dropout,计算的激活值将小于不应用 dropout 时(测试时)。所以我们需要扩展激活以保持测试阶段更简单。
我理解这个事实,但我不明白缩放是如何完成的。这是一个用于实现反向 dropout 的代码示例。
在上面的代码中,为什么激活被除以0.8
或将节点保留在层中的概率(keep_prob
)?任何数字示例都会有所帮助。
tensorflow - Tensorflow OD API - 微调模型时使用 dropout
我正在尝试用我自己的数据微调 SSD MobileNet v2(来自模型动物园)。在 pipeline.config 我看到它use_dropout
设置为 false。这是为什么?我认为应该使用 dropout 来防止过度拟合。
是因为批量标准化吗?在这篇论文中,它说:
3.4 Batch Normalization 对模型进行正则化
当使用 Batch Normalization 进行训练时,可以看到一个训练示例与 mini-batch 中的其他示例一起出现,并且训练网络不再为给定的训练示例生成确定性值。在我们的实验中,我们发现这种效果有利于网络的泛化。虽然 Dropout (Srivastava et al., 2014) 通常用于减少过度拟合,但在批量归一化网络中,我们发现它可以被移除或降低强度。
python - 如何在 Keras 模型中停用使用 training=True 调用的 dropout 层?
我希望查看训练 tf.keras 模型的最终输出。在这种情况下,它将是来自 softmax 函数的预测数组,例如 [0,0,0,1,0,1]。
这里的其他线程建议使用 model.predict(training_data),但这不适用于我的情况,因为我在训练和验证中使用 dropout,因此神经元被随机丢弃,再次使用相同的数据进行预测会给出不同的结果.
在 tensorflow 中,您可以很容易地在训练后获取模型的输出。这是来自Github 存储库的示例:
我可以从经过训练的模型中获得的唯一输出似乎是一个历史对象。还有一个 myModel.output 对象,但它是一个张量,如果不将数据放入其中,我就无法评估。有任何想法吗?
tensorflow - 在冻结的 Keras 模型中,dropout 层是否仍然处于活动状态(即 trainable=False)?
我有两个训练有素的模型 (model_A
和model_B
),它们都有 dropout 层。我已经冻结model_A
并将model_B
它们与一个新的密集层合并以获得model_AB
(但我没有删除model_A
's和model_B
's dropout层)。model_AB
的权重将是不可训练的,除了添加的密集层。
现在我的问题是:当我训练时,辍学层是否处于活动状态(即丢弃神经元model_A
)?model_B
model_AB
tensorflow - 使用 TensorFlow 2 将 Dropout 添加到 MobileNet
我正在使用 MobileNet 和 TensorFlow 2 来区分 4 个非常相似的玩具。每个玩具我正好有 750 张图片,一个标签包含 750 张“负面”图片,没有任何玩具。
我之前使用过 MobileNet 并取得了相当大的成功,但是关于这种情况的某些事情导致了很多过度拟合(训练/验证准确度之间存在约 30-40% 的差异)。该模型在 3 个 epoch 内很快训练到大约 99.8% 的训练准确度,但验证准确度停留在 75% 左右。验证数据集是 20% 的输入图像的随机集。在查看模型的准确性时,人们对其中一个玩具有很大的偏见,而许多其他玩具被错误地识别为该玩具。
我已经尝试了几乎所有的方法来解决这个问题:
我在添加到 MobileNet 顶部的 Conv2D 层之后添加了 Dropout,并尝试了 0.2 到 0.9 之间的各种丢弃率。
我在 Conv2D 层之前添加了一个额外的 Dropout 层,这似乎稍微改善了一些事情:
我还添加了更多测试数据,尝试在各种照明条件和背景下混合玩具照片,并生成叠加在随机背景上的玩具图像。这些都没有显着影响。
我应该将 dropout 添加到 MobileNet 模型中,而不仅仅是添加到我在它之后添加的层吗?我在 github 上遇到了这样的代码,但我不知道这是否真的是一个好主意 - 或者不知道如何使用 TensorFlow 2 来实现这一点。
这是明智的,还是可行的?
或者,我能想到的唯一其他想法是:
- 捕获更多图像,以使训练更加困难 - 但我认为每个项目 750 应该足以做得很好。
- 不要使用 MobileNet,从头开始创建神经网络或使用另一个预先存在的网络。
keras - 关于使用 keras 功能 API 启用/禁用 dropout 的问题
我正在使用 Keras 功能 API 来构建分类器,并training
在预测新实例时使用 dropout 层中的标志来启用 dropout(以便估计不确定性)。为了获得预期的响应,需要多次重复此预测,使用 keras 随机激活密集层中的链接,当然它的计算成本很高。因此,我还希望可以选择在预测阶段不使用 dropout,即使用所有网络链接。有谁知道我该怎么做?以下是我正在做的示例代码。我试着看看predict
有任何相关参数,但似乎没有(?)。从技术上讲,我可以在 dropout 层没有训练标志的情况下训练相同的模型,但我不想这样做(或者更好的是我想要一个更干净的解决方案,而不是拥有 2 个不同的模型)。
运行上面的示例,我得到以下输出:
正如预期的那样,相同输入的不同类别概率,因为来自 dropout 层的链接随机(停用)激活。
关于如何使用功能 API 在预测阶段启用/禁用 dropout 有什么建议吗?