LSTM Keras培训中的Acc降低到零

时间:2018-08-02 17:26:47

标签: python keras lstm

在尝试为轨迹分类实现LSTM网络时,即使是简单的轨迹,我也一直在努力获得不错的分类结果。而且,我的训练精度一直在波动,而没有明显提高,这在张量板上也可以看到:

训练准确性:

Training accuracy

这是我的模特

model1 = Sequential()
model1.add(LSTM(8, dropout=0.2, return_sequences=True, input_shape=(40,2)))
model1.add(LSTM(8,return_sequences=True))
model1.add(LSTM(8,return_sequences=False))
model1.add(Dense(1, activation='sigmoid'))`

和我的培训代码:

model1.compile(optimizer='adagrad',loss='binary_crossentropy', metrics=['accuracy'])

hist1 = model1.fit(dataScatter[:,70:110,:],outputScatter,validation_split=0.25,epochs=50, batch_size=20, callbacks = [tensorboard], verbose = 2)

我认为问题可能出在数据输入和输出形状上,因为模型本身似乎还不错。数据输入的形状为(2000,40,2),输出的形状为(2000,1)。

有人能发现一个错误吗?

2 个答案:

答案 0 :(得分:0)

尝试更改:

model1.add(Dense(1, activation='sigmoid'))`

收件人:

model1.add(TimeDistributed(Dense(1, activation='sigmoid')))

TimeDistributed一次将相同的密集层(相同的权重)应用于LSTM输出,每次一次。

我也推荐本教程https://machinelearningmastery.com/timedistributed-layer-for-long-short-term-memory-networks-in-python/

答案 1 :(得分:0)

通过与数据相关的一些调整,我能够将准确性提高到97%。主要障碍是用于训练和验证集的不平衡数据集拆分。归一化输入轨迹带来了进一步的改进。我还增加了第一层中的单元格数量。