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

Rav*_*euk 25 machine-learning deep-learning conv-neural-network keras dropout

偶尔我会看到一些模型正在使用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"))
Run Code Online (Sandbox Code Playgroud)

根据Keras的文件,它说:

此版本执行与Dropout相同的功能,但它会丢弃整个1D功能图而不是单个元素.

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

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

Max*_*xim 19

噪音形状

为了理解SpatialDropout1D,你应该习惯噪音形状的概念.在普通的香草辍学中,每个元素都是独立保存或丢弃的.例如,如果张量是[2, 2, 2],则根据随机硬币翻转(具有某些"头"概率),可以将8个元素中的每一个归零; 总共将有8个独立的硬币翻转,任意数量的值可能变为零,从而08.

有时需要做更多的事情.例如,可能需要沿轴放下整个切片0.在noise_shape这种情况下是[1, 2, 2]和辍学只涉及4个独立的随机硬币翻转.第一个组件将保持在一起或放在一起.归零元件的数目可以是0,2,4,68.它不能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]并丢弃整个1-d的特征图.

参考: Jonathan Tompson 使用卷积网络进行高效的对象本地化.


Dil*_*hat 12

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

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

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