如何在kers中的LSTM中在LSTM中增加辍学和注意力

时间:2019-09-08 08:10:54

标签: python tensorflow machine-learning keras lstm

我有大约1000个节点数据集,其中每个节点都有4个时间序列。每个时间序列的长度正好为6个长度。标签为0或1(即二进制分类)。

更准确地说,我的数据集如下所示。

node, time-series1, time_series2, time_series_3, time_series4, Label
n1, [1.2, 2.5, 3.7, 4.2, 5.6, 8.8], [6.2, 5.5, 4.7, 3.2, 2.6, 1.8], …, 1
n2, [5.2, 4.5, 3.7, 2.2, 1.6, 0.8], [8.2, 7.5, 6.7, 5.2, 4.6, 1.8], …, 0
and so on.

normalise将时间序列输入LSTM模型进行分类之前。

model = Sequential()
model.add(LSTM(10, input_shape=(6,4)))
model.add(Dense(32))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

print(data.shape) # (1000, 6, 4)
model.fit(data, target)

我对keras并不陌生,这就是为什么从最简单的LSTM模型开始。但是,现在我想使其成为一个可以在行业级别使用的级别。

我读到,在LSTM模型中添加dropoutattention层是很好的。如果您认为添加这样的图层适用于我的问题,请告诉我,如果可以,该怎么办? :)

注意:我不仅仅局限于讲解和关注层,还很高兴收到其他可用于改进模型的建议。

很高兴在需要时提供更多详细信息。

1 个答案:

答案 0 :(得分:1)

如果要在lstm单元中添加辍学,可以尝试

model = Sequential()
model.add(LSTM(10, input_shape=(6,4), dropout=0.5))
model.add(Dense(32))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

print(data.shape) # (1000, 6, 4)
model.fit(data, target)

或在lstm单元之间使用辍学,请考虑以下

model = Sequential()
model.add(LSTM(10, input_shape=(6,4)))
model.add(Dropout(0.5))
model.add(LSTM(10, input_shape=(6,4)))
model.add(Dense(32))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

print(data.shape) # (1000, 6, 4)
model.fit(data, target)