LSTM 前后的 Dropout 层。有什么不同?
Dropout layer before or after LSTM. What is the difference?
假设我们有一个用于时间序列预测的 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 之前添加它,它是在时间步长(时间序列的不同滞后)或不同的输入特征上应用 dropout,还是两者都有?
如果我们在 LSTM 之后添加它并且因为 return_sequences
是 False
,dropout 在这里做什么?
LSTM
中的dropout
选项和LSTM
层之前的dropout层有什么不同吗?
您将 Dropout
与其变体 SpatialDropoutND
(1D
、2D
或 3D
)混淆了。请参阅 documentation
(显然您不能 link 具体 class)。
Dropout
将随机二进制掩码应用于输入,无论形状如何,第一维(批次)除外,因此在这种情况下它适用于特征和时间步长。
这里,如果 return_sequences=False
,你只得到最后一个时间步长的输出,所以在你的情况下它的大小是 [batch, 10]
。 Dropout 会从第二个维度随机丢弃值
是的,有区别,因为 dropout
是时间步长,当 LSTM
产生序列时(例如 10
的序列通过展开的 LSTM 和一些特征在进入下一个单元之前被丢弃)。 Dropout
会丢弃随机元素(批量维度除外)。 SpatialDropout1D
会丢弃整个通道,在这种情况下,一些时间步会被完全丢弃(在卷积的情况下,您可以使用 SpatialDropout2D
来丢弃通道,无论是输入还是沿着网络)。
默认情况下,Dropout
创建一个由 0 和 1 组成的随机张量。没有模式,没有特权轴。所以,你不能说一个特定的东西被丢弃了,只是张量中的随机坐标。 (好吧,它会丢弃特征,但每个步骤的特征不同,每个样本的特征也不同)
如果需要,您可以使用 noise_shape
属性,它将定义随机张量的形状。然后,如果您想删除步骤、功能或示例,或者可能是组合,您可以 select。
- 下降时间步数:
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
的方式与在任何完全连接的网络中使用的方式相同。它为每个样本丢弃一组不同的特征。
作为参数的 dropout 与 LSTM
有很多不同。它生成 4 个不同的 dropout mask,用于为每个不同的门创建不同的输入。 (您可以查看 LSTMCell 代码来检查这一点)。
此外,还有 recurrent_dropout
的选项,它将生成 4 个 dropout 掩码,但要应用于状态而不是输入,循环计算的每个步骤。
假设我们有一个用于时间序列预测的 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 之前添加它,它是在时间步长(时间序列的不同滞后)或不同的输入特征上应用 dropout,还是两者都有?
如果我们在 LSTM 之后添加它并且因为
return_sequences
是False
,dropout 在这里做什么?LSTM
中的dropout
选项和LSTM
层之前的dropout层有什么不同吗?
您将 Dropout
与其变体 SpatialDropoutND
(1D
、2D
或 3D
)混淆了。请参阅 documentation
(显然您不能 link 具体 class)。
Dropout
将随机二进制掩码应用于输入,无论形状如何,第一维(批次)除外,因此在这种情况下它适用于特征和时间步长。这里,如果
return_sequences=False
,你只得到最后一个时间步长的输出,所以在你的情况下它的大小是[batch, 10]
。 Dropout 会从第二个维度随机丢弃值是的,有区别,因为
dropout
是时间步长,当LSTM
产生序列时(例如10
的序列通过展开的 LSTM 和一些特征在进入下一个单元之前被丢弃)。Dropout
会丢弃随机元素(批量维度除外)。SpatialDropout1D
会丢弃整个通道,在这种情况下,一些时间步会被完全丢弃(在卷积的情况下,您可以使用SpatialDropout2D
来丢弃通道,无论是输入还是沿着网络)。
默认情况下,Dropout
创建一个由 0 和 1 组成的随机张量。没有模式,没有特权轴。所以,你不能说一个特定的东西被丢弃了,只是张量中的随机坐标。 (好吧,它会丢弃特征,但每个步骤的特征不同,每个样本的特征也不同)
如果需要,您可以使用 noise_shape
属性,它将定义随机张量的形状。然后,如果您想删除步骤、功能或示例,或者可能是组合,您可以 select。
- 下降时间步数:
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
的方式与在任何完全连接的网络中使用的方式相同。它为每个样本丢弃一组不同的特征。
作为参数的 dropout 与 LSTM
有很多不同。它生成 4 个不同的 dropout mask,用于为每个不同的门创建不同的输入。 (您可以查看 LSTMCell 代码来检查这一点)。
此外,还有 recurrent_dropout
的选项,它将生成 4 个 dropout 掩码,但要应用于状态而不是输入,循环计算的每个步骤。