问题标签 [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.
machine-learning - 为什么我们要在使用 dropout 时缩放输出?
从辍学论文:
“这个想法是在测试时使用单个神经网络而不会丢失。这个网络的权重是训练权重的缩小版本。如果在训练期间以概率 p 保留一个单元,则该单元的传出权重会相乘如图 2 所示,在测试时乘以 p。这确保对于任何隐藏单元,预期输出(在用于在训练时丢弃单元的分布下)与测试时的实际输出相同。”
为什么我们要保留预期的输出?如果我们使用 ReLU 激活,权重或激活的线性缩放会导致网络输出的线性缩放,并且对分类精度没有任何影响。
我错过了什么?
python-3.x - 从保存的张量流模型中更改张量值
我保存了一些具有丢失层的模型。不幸的是,dropout_keep_dim值没有作为占位符给出。现在,当我出于测试目的恢复模型时,它会为每次运行提供随机输出。所以,我的问题是,是否可以更改已保存变量的dropout_keep_dim ?dropout层的添加方式如下:
我已经在谷歌上浪费了几个小时,但没有找到任何可行的解决方案。是否有解决方案或者我保存的模型现在没有用了?Tf.assign 不起作用,就我而言, dropout_keep_dim 不是变量。任何形式的帮助表示赞赏。
注意。我可以恢复dropout_keep_dim值并打印它。如果可能的话,我想更改它,然后使用保存的权重进行测试。
python - Keras/Tensorflow中dropout的动态切换
我正在 Tensorflow 中构建强化学习算法,我希望能够在一次调用session.run()
.
基本原理:我需要 (1) 做一个没有 dropout 的前向传递来计算目标;(2) 对生成的目标进行训练。如果我在不同的调用中执行这两个步骤session.run()
,一切都很好。但我想通过一次调用session.run()
(使用tf.stop_gradients(targets)
)来做到这一点。
在尝试了几个没有成功的解决方案之后,我找到了一个解决方案,我用一个变量替换了Keras 使用的learning_phase占位符(因为占位符是张量并且不允许赋值)并使用自定义层将该变量设置为 True 或根据需要为假。该解决方案如下面的代码所示。获取其中一个m1
或m2
单独的值(例如,运行sess.run(m1, feed_dict={ph:np.ones((1,1))})
按预期工作而没有错误。但是,获取 的值m3
,或同时获取m1
and的值m2
,有时工作,有时不工作(并且错误消息没有提供信息)。
你知道我做错了什么或者更好的方法来做我想做的事吗?
编辑:代码显示了一个玩具示例。实际上,我有一个模型,我需要运行两次向前传球(一次关闭 dropout,另一次打开 dropout)和一次向后传球。我想在不返回 python 的情况下完成这一切。
编辑 2: Daniel Möller 下面的解决方案在使用Dropout
层时有效,但如果在层内使用 dropoutLSTM
怎么办?
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()
具有相同的输入张量,我该怎么办?
非常感谢 :-)
python - PyTorch - 如何在评估模式下停用辍学
这是我定义的模型,它是一个具有 2 个完全连接层的简单 lstm。
x_train
和x_val
是具有形状的浮动数据框(4478,30)
,而y_train
和y_val
是具有形状的浮动 df(4478,10)
定义变量并做一次bp,我可以发现验证损失为1.4941
但是我再次调用了 forward 函数,由于 dropout 的随机性,我得到了一个不同的数字
我应该怎么做才能消除预测短语中的所有丢失?
我试过eval()
:
并传递一个附加参数 p 来控制 dropout:
但他们都没有工作。
keras - Keras Dropout 层模型预测
dropout 层应该只在模型训练期间使用,而不是在测试期间使用。
如果我的 Keras 顺序模型中有一个 dropout 层,我是否需要先删除或静音它model.predict()
?
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。这些新的平均权重和偏差将用于预测新的输入。
我只是想确认我的理解是正确还是错误。如果错了,请分享你的想法并教我。先感谢您。
tensorflow - 如何使用 RNNCells 将 dropout 添加到我的 tensorflow 神经网络中?
我有一些神经网络(张量流)
像这样(下)是正确的?它正在工作,但我不确定;)
如何添加到这个神经网络 tensorflow dropout?
感谢您的任何建议!
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)
代码工作正常。我不确定代码中发生了什么。
下面显示的是我的完整代码: