- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题在最后。
安example CNN 使用小批量 GD 进行训练,并使用最后一个全连接层(第 60 行)中的 dropout 作为
fc1 = tf.layers.dropout(fc1, rate=dropout, training=is_training)
起初我以为tf.layers.dropout
或tf.nn.dropout
随机将列中的神经元设置为零。但我最近发现事实并非如此。下面的代码打印 dropout
的内容做。我用了fc0
作为 4 个样本 x 10 特征矩阵,并且 fc
作为退出版本。
import tensorflow as tf
import numpy as np
fc0 = tf.random_normal([4, 10])
fc = tf.nn.dropout(fc0, 0.5)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
a, b = sess.run([fc0, fc])
np.savetxt("oo.txt", np.vstack((a, b)), fmt="%.2f", delimiter=",")
输出 oo.txt
(原始矩阵:第 1-4 行,删除矩阵:第 5-8 行):
0.10,1.69,0.36,-0.53,0.89,0.71,-0.84,0.24,-0.72,-0.44
0.88,0.32,0.58,-0.18,1.57,0.04,0.58,-0.56,-0.66,0.59
-1.65,-1.68,-0.26,-0.09,-1.35,-0.21,1.78,-1.69,-0.47,1.26
-1.52,0.52,-0.99,0.35,0.90,1.17,-0.92,-0.68,-0.27,0.68
0.20,0.00,0.71,-0.00,0.00,0.00,-0.00,0.47,-0.00,-0.87
0.00,0.00,0.00,-0.00,3.15,0.07,1.16,-0.00,-1.32,0.00
-0.00,-3.36,-0.00,-0.17,-0.00,-0.42,3.57,-3.37,-0.00,2.53
-0.00,1.05,-1.99,0.00,1.80,0.00,-0.00,-0.00,-0.55,1.35
我对正确的? dropout 的理解是,在小批量或中剔除每个样本的 p% 相同单位>批量梯度下降阶段,反向传播更新“细化网络”的权重和偏差。然而,在实现example ,一批中每个样本的神经元被随机丢弃,如 oo.txt
所示。第 5 行到第 8 行,对于每个样本,“细化网络”不同。
作为比较,在随机梯度下降的情况下,样本被逐个输入神经网络,并且在每次迭代中,每个 tf.layers.dropout
的权重引入的“细化网络”已更新。
我的问题是,在小批量或批量训练中,是否不应该在一批中的所有样本中剔除相同的神经元?也许在每次迭代时对所有输入批处理样本应用一个掩码?像这样的东西:
# ones: a 1xN all 1s tensor
# mask: a 1xN 0-1 tensor, multiply fc1 by mask with broadcasting along the axis of samples
mask = tf.layers.dropout(ones, rate=dropout, training=is_training)
fc1 = tf.multiply(fc1, mask)
现在我正在考虑 example 中的退出策略可能是更新某个神经元权重的一种加权方式,如果一个神经元保留在小批量中10个样本中的1个中,那么它的权重将被更新alpha * 1/10 * (y_k_hat-y_k) * x_k
,与alpha * 1/10 * sum[(y_k_hat-y_k) * x_k]
相比保留在所有 10 个样本中的另一个神经元的权重?
截图来自here
最佳答案
辍学通常用于防止过度拟合。在这种情况下,一个神经元将受到巨大的权重。通过不时随机地将其设为 0,可以迫使网络使用更多的神经元来确定结果。为了使其正常工作,您应该为每个示例删除不同的神经元,以便您计算的梯度与没有丢失时获得的梯度更相似。
如果您要为批处理中的每个示例删除相同的神经元,我的猜测是您将获得不太稳定的梯度(可能对您的应用程序并不重要)。
此外,dropout 还会放大其余值,以将平均激活保持在大致相同的水平。如果没有它,网络将学习错误的偏差,或者当您关闭 dropout 时会过度饱和。
如果您仍然希望在批处理中删除相同的神经元,请将 dropout 应用于形状为 (1, num_neurons) 的全 1 张量,然后将其与激活值相乘。
关于tensorflow - 小批量梯度下降中 dropout 的使用困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48618108/
我有一个程序可以打开一个窗口并快速改变背景颜色并随机弹出矩形和椭圆形。我的代码有效,但我不知道为什么,因为我没有在我的代码中调用 repaint() 函数。当我使用我个人的 update() 函数包含
var allRapidSpells = $$('input[value^=RSW]'); 谁能告诉我这是做什么的? 最佳答案 我敢猜测您正在使用 MooTools ,一个 JavaScript 框架
我有一个抽象父类,它有多个子类。我希望 child 能够拥有一个对于该 child 的每个实例都相同的变量。我不想将构造函数传递给 child 来告诉它它的名字,因为当它可以被硬编码时,这看起来很愚蠢
我刚刚在 Git 存储库上做了一些糟糕的事情,我不知道如何解决这个问题。我什至不知道我是怎么把它弄成这样的……! 在存储库(托管在 git hub 上)上,有 3 个我感兴趣的分支:master、br
我是 GIT 的新手,在理解提交日志图时遇到问题。 我感觉每条平行线都是一个分支。虽然我的源代码只有 2 个分支。我在下面提供的提交日志图中看到 3-4 条平行线(Microsoft Team Ser
我是 WPF 的新手,ScrollViewer 让我很沮丧。要么我只是没有“得到”它,要么它是一种有限的控制。 这是我的挫折: 水平滚动错误 水平滚动条仅在列表底部可见(我必须滚动到底部才能看到) 坏
那么 $('table.selectable td.capable input:text') 比 $('table.selectable td input:text') 更好吗?换句话说,指定一个类会
我刚刚完成了计算机图形学类(class),我们必须对光线追踪器进行编程。尽管所有结果都是正确的,但我对 OpenMP 的使用感到困惑(顺便说一句,这不是类(class)的一部分)。我有这个循环(C++
与 PatternSynonyms ( explicitly bidirectional form ),pattern-to-expr 方程实际上形成了一个函数,但拼写为大写(假设您最终得到正确类型的
我是 javascript/coffeescript 新手。 有人可以解释一下为什么这个 CoffeeScript/JavaScript 会毫无延迟地快速通过吗?我对第一种情况的想法是,它是对 upd
如果我调用document.getElementsByClassName('cl'),我会得到一个 HTMLCollection。它似乎包含 Element 对象而不是 HTMLElement 对象,
这是我本月的 azure payasyougo 使用费用。 我很难理解为什么我要为标准中型应用服务付费,我认为它会包含在计算时间中?我只运行一个云服务,这对于一个没有做太多事情的云服务来说似乎有点陡峭
除了the issue I am already having之外,我还在I saw a video on it之后安装了HBase(尚未安装)之前,还安装了Zookeeper。在安装它时,我遇到了许
我正在将 XSLT 与 regexp:match exslt 函数一起使用。上述函数采用 JavaScript Regex 模式。因此,我尝试匹配一组数字 1 到 3 OR 5 到 7 OR 9 到
我想知道为什么这段代码会给出消息:SyntaxError:意外的标记其他。 var compare = function(choice1,choice2){ if(choice1===choice2)
我尝试使用复选框和 JQuery 过滤日历上的事件, $(document).ready(function () { $('.scrollable-menu :checkbox').click(f
假设我们有一个用户想要一个名为:“test/lasdhjal.txt”,无论如何。现在,如果我将其放入新的文件(输入)中;对象里面,它会认为 test/是一个文件夹,而它是名称的一部分。我能做什么呢?
问题是 stash 的更改不会留在我 stash 它们的分支中。其他分支存储将被覆盖示例: 我愿意: git checkout iss4 // made some changes gi
我是一个 java 新手,并且在 StackOverflow 错误/在类之间访问文件的能力方面遇到了一个非常令人困惑的问题。我知道根本原因可能是我进行了一些递归调用,但修复它的语法却让我无法理解。我认
public X createData(int n) { int[] values = new int[n]; Random rand = new Random(); for
我是一名优秀的程序员,十分优秀!