代码之家  ›  专栏  ›  技术社区  ›  Raven Cheuk

如何理解SpatialDropout1D以及何时使用它?

  •  42
  • Raven Cheuk  · 技术社区  · 8 年前

    偶尔我会看到一些模型正在使用 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的文件,它说:

    这个版本执行与退出相同的功能,但是它会退出 整个1D特征映射,而不是单个元素。

    然而,我无法理解 entrie 1D功能 .更具体地说,我无法想象 空间分布 与中解释的模型相同 quora . 有人能用与quora相同的模型来解释这个概念吗?

    还有,在什么情况下我们会使用 空间分布 而不是 辍学者 ?

    2 回复  |  直到 8 年前
        1
  •  45
  •   Dilshat    7 年前

    为了简单起见,我首先要指出,所谓的特征图(1D、2D等)是我们的常规通道。让我们来看一些例子:

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

    2. SpatialDropout1D() :在这种情况下,结果看起来像[[1,0,1],[2,0,2]]。注意,第二个元素被归零 全部的 频道。

        2
  •  34
  •   Maxim    8 年前

    噪音形状

    为了理解 SpatialDropout1D ,你应该习惯 噪声形状 .在纯香草辍学中,每个元素都是独立保留或删除的。例如,如果张量是 [2, 2, 2] ,8个元素中的每一个都可以根据随机抛硬币(具有一定的“头”概率)归零;总共将有8次独立的抛硬币,任何数值都可能从零变为零 0 8 .

    有时需要做的不止这些。例如,可能需要放下 整片 沿着 0 轴这个 noise_shape 在这种情况下是 [1, 2, 2] 辍学只涉及4次独立的随机抛硬币。第一个组件要么保持在一起,要么一起掉落。归零元素的数量可以是 0 , 2 , 4 , 6 8. .不可能 1 5 .

    另一种看法是,想象输入张量实际上是 [2, 2] ,但每个值都是双精度(或多精度)。该层不会删除中间的字节,而是删除完整的多字节值。

    为什么它有用?

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

    您可能希望这样做来考虑相邻像素的相关性,尤其是在早期的卷积层中。实际上,您希望防止像素与其邻域在特征地图上的共同自适应,并使它们像不存在其他特征地图一样学习。这就是 SpatialDropout2D 正在做:它促进了要素图之间的独立性。

    这个 空间分布 非常相似:给定 shape(x) = [k, l, m] 它使用 noise_shape = [k, 1, m] 并删除整个1-D特征图。

    参考: Efficient Object Localization Using Convolutional Networks 作者:乔纳森·汤普森。