有时,我看到某些模型使用的是SpatialDropout1D而不是Dropout。例如,在语音标记神经网络部分中,他们使用:

model = Sequential()
model.add(Embedding(s_vocabsize, EMBED_SIZE,
                    input_length=MAX_SEQLEN))
model.add(SpatialDropout1D(0.2)) ##This
model.add(GRU(HIDDEN_SIZE, dropout=0.2, recurrent_dropout=0.2))
model.add(RepeatVector(MAX_SEQLEN))
model.add(GRU(HIDDEN_SIZE, return_sequences=True))
model.add(TimeDistributed(Dense(t_vocabsize)))
model.add(Activation("softmax"))

根据Keras的文档,它说:



但是,我无法理解 entrie 1D功能的含义。更具体地说,我无法以quora中说明的同一模型来可视化SpatialDropout1D
有人可以使用与法定人数相同的模型来解释这个概念吗?

另外,在什么情况下,我们将使用SpatialDropout1D而不是Dropout

最佳答案

噪音形状

为了理解SpatialDropout1D,您应该习惯于噪声形状的概念。在普通的 Vanilla 辍学中,每个元素都是独立保存或删除的。例如,如果张量为[2, 2, 2],则可以根据随机硬币翻转(具有某些“正面”概率)将8个元素中的每个元素清零。总共将有8次独立的硬币翻转,从08,任何数量的值都可能变为零。

有时需要做的还不止这些。例如,可能需要沿着0轴放下整个 slice 。在这种情况下,noise_shape[1, 2, 2],辍学仅涉及4次独立的随机硬币翻转。第一个组件将保持在一起或一起下降。零元素的数量可以是02468。不能是15

另一种查看这种情况的方式是,假设输入张量实际上是[2, 2],但是每个值都是 double (或多精度)。该层不会丢弃中间的字节,而是会丢弃完整的多字节值。

为什么有用?

上面的示例仅用于说明,在实际应用中并不常见。更现实的示例是:shape(x) = [k, l, m, n]noise_shape = [k, 1, 1, n]。在这种情况下,每个批次和通道组件将独立保存,但每个行和列将保留或不保留在一起。换句话说,整个[l, m]功能图将保留或删除。

您可能需要这样做以解决相邻像素的相关性,尤其是在早期卷积层中。有效地,您想防止像素与其相邻像素在特征图中的共同适应,并使它们像没有其他特征图那样学习。这正是SpatialDropout2D所做的:它促进了特征图之间的独立性。
SpatialDropout1D非常相似:给定shape(x) = [k, l, m],它使用noise_shape = [k, 1, m]并删除整个一维特征图。

引用:Efficient Object Localization Using Convolutional Networks
乔纳森·汤普森(Jonathan Tompson)等人

关于machine-learning - 如何理解SpatialDropout1D以及何时使用它?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50393666/

10-12 07:25