假设我们有一个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_sequences
为False
,那么这里的辍学情况是什么?
dropout
中的LSTM
选项与LSTM
层之前的退出层之间是否有区别?
您将Dropout
与它的变体SpatialDropoutND
(1D
,2D
或3D
)混淆。请参阅documentation
(显然您不能链接特定的类)。
[documentation
将随机二进制掩码应用于输入,而不管形状,除了第一维(批处理),因此在这种情况下,它适用于特征和时间步。
这里,如果Dropout
,则仅从上一个时间步获得输出,因此在您的情况下大小为return_sequences=False
。辍学将从第二维中随机丢弃值
是的,存在差异,因为[batch, 10]
是dropout
产生序列的时间步长(例如LSTM
的序列经过展开的LSTM,并且某些特征在进入下一个单元格之前已被删除) )。 10
将删除随机元素(批处理尺寸除外)。 Dropout
会丢弃整个通道,在这种情况下,某些时间步将完全消失(在卷积情况下,您可以使用SpatialDropout1D
来丢弃输入或沿网络的通道)。
默认情况下,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个滤除掩码,但是将应用于循环计算的每个步骤的状态而不是输入。