LSTM之前或之后的下降层。有什么区别?

问题描述 投票:1回答:2

假设我们有一个LSTM模型用于时间序列预测。另外,这是一个多变量情况,因此我们使用了多个功能来训练模型。

ipt   = Input(shape = (shape[0], shape[1])
x     = Dropout(0.3)(ipt) ## Dropout before LSTM.
x     = CuDNNLSTM(10, return_sequences = False)(x)
out   = Dense(1, activation='relu')(x)

我们可以在LSTM之前(如上面的代码)或在LSTM之后添加Dropout层。

  • 如果我们在LSTM之前添加它,它是对时间步(时间序列的不同滞后)或不同的输入功能,或两者都应用辍学吗?

  • 如果我们在LSTM之后添加它,并且由于return_sequencesFalse,那么这里的辍学情况是什么?

  • dropout中的LSTM选项与LSTM层之前的退出层之间是否有区别?

tensorflow keras lstm dropout
2个回答
1
投票

您将Dropout与它的变体SpatialDropoutND1D2D3D)混淆。请参阅documentation(显然您不能链接特定的类)。

  • [documentation将随机二进制掩码应用于输入,而不管形状,除了第一维(批处理),因此在这种情况下,它适用于特征和时间步。

  • 这里,如果Dropout,则仅从上一个时间步获得输出,因此在您的情况下大小为return_sequences=False。辍学将从第二维中随机丢弃值

  • 是的,存在差异,因为[batch, 10]dropout产生序列的时间步长(例如LSTM的序列经过展开的LSTM,并且某些特征在进入下一个单元格之前已被删除) )。 10将删除随机元素(批处理尺寸除外)。 Dropout会丢弃整个通道,在这种情况下,某些时间步将完全消失(在卷积情况下,您可以使用SpatialDropout1D来丢弃输入或沿网络的通道)。


0
投票

默认情况下,SpatialDropout2D创建零到1的随机张量。没有模式,没有特权轴。因此,您不能说要丢弃特定的东西,而只能说张量中的随机坐标。

您可以根据需要使用Dropout属性,该属性将定义随机张量的形状。然后,您可以选择是否要删除步骤,功能或示例,或者可能是组合。

  • 下降时间步长:noise_shape
  • 拖放功能:noise_shape = (1,steps,1)
  • 放置样本:noise_shape = (1,1, features)

还有noise_shape = (None, 1, 1)图层,该图层自动使用SpatialDropout1D。这会在所有时间步中删除相同的功能,但会分别对待每个样本(每个样本都会删除不同的功能组)。

noise_shape = (input_shape[0], 1, input_shape[2])之后有LSTM。因此,使用shape = (None, 10)的方式与在任何完全连接的网络中使用的方式相同。它为每个样本删除了一组不同的功能。

辍学作为Dropout的参数有很多差异。它生成4个不同的压差掩码,用于为每个不同的门创建不同的输入。 (您可以查看LSTM代码进行检查)。

[此外,还有LSTMCell选项,它将生成4个滤除掩码,但是将应用于循环计算的每个步骤的状态而不是输入。

© www.soinside.com 2019 - 2024. All rights reserved.