问题标签 [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.

0 投票
1 回答
747 浏览

machine-learning - 为什么我们要在使用 dropout 时缩放输出?

辍学论文

“这个想法是在测试时使用单个神经网络而不会丢失。这个网络的权重是训练权重的缩小版本。如果在训练期间以概率 p 保留一个单元,则该单元的传出权重会相乘如图 2 所示,在测试时乘以 p。这确保对于任何隐藏单元,预期输出(在用于在训练时丢弃单元的分布下)与测试时的实际输出相同。”

为什么我们要保留预期的输出?如果我们使用 ReLU 激活,权重或激活的线性缩放会导致网络输出的线性缩放,并且对分类精度没有任何影响。

我错过了什么?

0 投票
0 回答
41 浏览

python-3.x - 从保存的张量流模型中更改张量值

我保存了一些具有丢失层的模型。不幸的是,dropout_keep_dim值没有作为占位符给出。现在,当我出于测试目的恢复模型时,它会为每次运行提供随机输出。所以,我的问题是,是否可以更改已保存变量的dropout_keep_dim ?dropout层的添加方式如下:

我已经在谷歌上浪费了几个小时,但没有找到任何可行的解决方案。是否有解决方案或者我保存的模型现在没有用了?Tf.assign 不起作用,就我而言, dropout_keep_dim 不是变量。任何形式的帮助表示赞赏。

注意。我可以恢复dropout_keep_dim值并打印它。如果可能的话,我想更改它,然后使用保存的权重进行测试。

0 投票
3 回答
1361 浏览

python - Keras/Tensorflow中dropout的动态切换

我正在 Tensorflow 中构建强化学习算法,我希望能够在一次调用session.run().

基本原理:我需要 (1) 做一个没有 dropout 的前向传递来计算目标;(2) 对生成的目标进行训练。如果我在不同的调用中执行这两个步骤session.run(),一切都很好。但我想通过一次调用session.run()(使用tf.stop_gradients(targets))来做到这一点。

在尝试了几个没有成功的解决方案之后,我找到了一个解决方案,我用一个变量替换了Keras 使用的learning_phase占位符(因为占位符是张量并且不允许赋值)并使用自定义层将该变量设置为 True 或根据需要为假。该解决方案如下面的代码所示。获取其中一个m1m2单独的值(例如,运行sess.run(m1, feed_dict={ph:np.ones((1,1))})按预期工作而没有错误。但是,获取 的值m3,或同时获取m1and的值m2,有时工作,有时不工作(并且错误消息没有提供信息)。

你知道我做错了什么或者更好的方法来做我想做的事吗?

编辑:代码显示了一个玩具示例。实际上,我有一个模型,我需要运行两次向前传球(一次关闭 dropout,另一次打开 dropout)和一次向后传球。我想在不返回 python 的情况下完成这一切。

编辑 2: Daniel Möller 下面的解决方案在使用Dropout层时有效,但如果在层内使用 dropoutLSTM怎么办?

0 投票
1 回答
398 浏览

python - 当使用 tf.data.TFRecordDataset 作为输入管道时,如何在同一轮迭代中多次调用 sess.run() 或 eval()?

有了tensorflow,我做了一个dataset = tf.data.TFRecordDataset(filename)iterator = dataset.make_one_shot_iterator()。然后在每一轮中iterator.get_next()都会给出一小批数据作为输入。

我正在训练一个有Dropout层的网络,所以我应该写这样的东西:

其中keep_prob表示保持神经元存活的概率,这在训练和测试(这里是评估)过程中有所不同。

这里出现的问题是每个sess.run()触发器iterator.get_next()都会获得一批新的输入。这不是它应该的样子。

如果我想让这两个sess.run()具有相同的输入张量,我该怎么办?

非常感谢 :-)

0 投票
3 回答
22499 浏览

python - PyTorch - 如何在评估模式下停用辍学

这是我定义的模型,它是一个具有 2 个完全连接层的简单 lstm。

x_trainx_val是具有形状的浮动数据框(4478,30),而y_trainy_val是具有形状的浮动 df(4478,10)

定义变量并做一次bp,我可以发现验证损失为1.4941

但是我再次调用了 forward 函数,由于 dropout 的随机性,我得到了一个不同的数字

我应该怎么做才能消除预测短语中的所有丢失?

我试过eval()

并传递一个附加参数 p 来控制 dropout:

但他们都没有工作。

0 投票
1 回答
929 浏览

keras - Keras Dropout 层模型预测

dropout 层应该只在模型训练期间使用,而不是在测试期间使用。

如果我的 Keras 顺序模型中有一个 dropout 层,我是否需要先删除或静音它model.predict()

0 投票
1 回答
57 浏览

neural-network - DNN中dropout的理解

据我了解 DNN 的 dropout 正则化是:

退出:

首先,我们从 DNN 中随机删除神经元,只保留输入和输出相同。然后我们基于一个mini-batch进行前向传播和后向传播;学习这个小批量的梯度,然后更新权重和偏差——这里我将这些更新的权重和偏差表示为 Updated_Set_1。

然后,我们将 DNN 恢复到默认状态并随机删除神经元。现在我们执行前向和后向传播并找到一组新的权重和偏差,称为 Updated_Set_2。这个过程一直持续到 Updated_Set_N ~ N 代表小批量的数量。

最后,我们根据总的 Updated_Set_N 计算所有权重和偏差的平均值;例如,从 Updated_Set_1 ~ Updated_Set_N。这些新的平均权重和偏差将用于预测新的输入。

我只是想确认我的理解是正确还是错误。如果错了,请分享你的想法并教我。先感谢您。

0 投票
1 回答
146 浏览

tensorflow - 如何使用 RNNCells 将 dropout 添加到我的 tensorflow 神经网络中?

我有一些神经网络(张量流)

像这样(下)是正确的?它正在工作,但我不确定;)

如何添加到这个神经网络 tensorflow dropout?

感谢您的任何建议!

0 投票
2 回答
1095 浏览

python-3.x - 输入包含 NaN、无穷大或对于 Tensorflow 中的 dtype('float64') 而言太大的值

我正在尝试训练 LSTM,在我的模型中,我有一个指数学习率衰减和一个 dropout 层。为了在测试和验证时停用 dropout 层,我为 dropout 率放置了一个占位符,并给它一个默认值 1.0,在训练时我将它设置为 0.5。dropou_rate 占位符值被传递给 tf.layers.dropout()。当我在验证期间运行它时,我收到以下错误。

ValueError:输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值。

下面显示的是堆栈跟踪:

在 check_array _assert_all_finite(array) 文件“/home/suleka/anaconda3/lib/python3.6/site-packages/sklearn/utils/validation.py”中,第 44 行,在 _assert_all_finite“或对于 %r 而言太大的值。” % X.dtype) ValueError: 输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值。

当我将学习率作为 tf.layers.dropout 中的一个值时,例如:

dropout = tf.layers.dropout(last, rate=0.5, training=True)

代码工作正常。我不确定代码中发生了什么。

下面显示的是我的完整代码:

0 投票
1 回答
180 浏览

tensorflow - 使用 TensorFlow Keras 训练 DNN。为什么使用 Dropout 时精度会下降

我正在使用 TensorFlow Keras 构建和拟合深度神经网络 (DNN)。我读过的文献鼓励我使用 Dropout 层。但是,当我添加dropout值为 的图层时0.5,我的渐变体面进展表现得很奇怪。具体来说,训练准确度和验证准确度似乎有一定的硬性限制。

这是什么效果?为什么会这样?任何意见或反馈将不胜感激。

matplotlib.pyplot 精度

这是一些代码: