如何理解SpatialDropout1D以及何时使用它?
conv-neural-network
deep-learning
keras
machine-learning
9
0

有时我看到一些模型使用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的文档,它说:

此版本执行与Dropout相同的功能,但是它将删除整个1D特征图,而不是单个元素。

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

另外,在什么情况下我们将使用SpatialDropout1D代替Dropout

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

噪音形状

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

有时需要做的还不止这些。例如,可能需要沿着0轴放下整个切片 。在这种情况下, noise_shape[1, 2, 2] noise_shape [1, 2, 2] ,并且退出仅涉及4次独立的随机硬币翻转。第一部分将保持在一起或一起下降。调零元素的数目可以是02468 。不能为15

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

为什么有用?

上面的示例仅用于说明,在实际应用中并不常见。更现实的例子是: 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]并删除整个一维特征图。

参考:Jonathan Tompson等人的《 使用卷积网络进行有效的对象定位 》。

收藏
评论

为了简单起见,我首先要注意的是所谓的特征贴图(一维,二维等)是我们的常规通道。让我们看一些例子:

  1. Dropout() :我们定义2D输入:[[1,1,1],[2,2,2]]。辍学将独立考虑每个元素,并可能导致类似[[1,0,1],[0,2,2]]

  2. SpatialDropout1D() :在这种情况下,结果看起来像[[ SpatialDropout1D() ],[ SpatialDropout1D() ]]。请注意,第二个元素在所有通道中均被清零。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号