在尝试为轨迹分类实现LSTM网络时,即使是简单的轨迹,我也一直在努力获得不错的分类结果。而且,我的训练精度一直在波动,而没有明显提高,这在张量板上也可以看到:
训练准确性:
这是我的模特
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)。
有人能发现一个错误吗?
答案 0 :(得分:0)
尝试更改:
model1.add(Dense(1, activation='sigmoid'))`
收件人:
model1.add(TimeDistributed(Dense(1, activation='sigmoid')))
TimeDistributed一次将相同的密集层(相同的权重)应用于LSTM输出,每次一次。
答案 1 :(得分:0)
通过与数据相关的一些调整,我能够将准确性提高到97%。主要障碍是用于训练和验证集的不平衡数据集拆分。归一化输入轨迹带来了进一步的改进。我还增加了第一层中的单元格数量。