Keras LSTM网络预测所有信号属于同一类别(在3个不同的信号中)



我正在做一个涉及信号分类的项目。我正在使用keras尝试不同的ANN模型,看看哪一个更好,目前专注于简单的网络,但我正在与LSTM模型作斗争,下面是这个例子:https://machinelearningmastery.com/how-to-develop-rnn-models-for-human-activity-recognition-time-series-classification/.

我的输入是从电子传感器获得的1D信号,该传感器将被分为3个不同的类别。看这里,两个不同类别的一个信号,所以随着时间的推移,它们是完全不同的。https://www.dropbox.com/s/9ctdegtuyjamp48/example_signals.png?dl=0

从一个简单的模型开始,我们正在尝试以下简单的模型。由于信号的长度不同,因此对它们进行了掩蔽处理,将每个信号放大到掩蔽值为-1000的最长信号(在我们的信号中不可能出现该值(。使用以下命令将数据从2D正确地重塑为3D(因为LSTM层需要3D(,因为我只有一个功能:

Inputs = Inputs.reshape((Inputs.shape[0],Inputs.shape[1],1))

然后,将数据分为训练和验证两部分,并输入以下模型:

model = Sequential()
model.add(Masking(mask_value=-1000, input_shape=(num_steps,1)))
model.add(LSTM(20, return_sequences=False))
model.add(Dense(15, activation='sigmoid'))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['categorical_accuracy'])

然而,由于某种原因,每次训练网络时,它总是预测所有信号都来自同一类别,每次训练时可能是不同的类别,通常是输入数据中有更多案例的类别。如果我强迫网络使用每个类别相同数量的数据进行训练,就会得到相同的结果。

我不认为这种行为是正常的:可能会发生精度差的情况,但这一定与模型中的一些基本错误有关,因为我没有发现这些错误,因为训练中的给定数据输入正确,没有错误,经过多次复查。有人知道为什么会发生这种事吗?请告诉我是否有更多的信息可以添加到这篇文章中。

对于任何好奇的读者来说:最后我可以通过规范化数据来解决它。

def LSTM_input_normalize(inputs):
new_inputs = []
for in_ in inputs:
if -1000 in in_:
start_idx = np.where(in_ == -1000)[0][0]  # index of the first "-1000" in the sequence
else:
start_idx = in_.shape[0]
# compute mean and std of the current sequence
curr_mean = np.mean(in_[:start_idx])
curr_std = np.std(in_[:start_idx])
# normalize the single sequence
in_[:start_idx] = (in_[:start_idx] - curr_mean) / curr_std
new_inputs.append(in_)
return np.array(new_inputs)

最新更新