首页 文章

糟糕的表现keras lstm

提问于
浏览
1

我想创建一个lstm模型来分类信号 .

假设我有1000个信号文件 . 每个文件都包含一个形状矩阵(500,5),这意味着在每个文件中,我有5个功能(列)和500行 .

0          1          2         3        4
0        5        5.3         2.3       4.2      2.2

...     ...       ...        ...         ...      ...

499     2500      1.2         7.4        6.7       8.6

对于每个文件,有一个输出是布尔值(True或False) . 形状是(1,)

我创建了一个数据库,数据,形状(1000,5,500),目标矢量的形状(1000,1) .

然后我分割数据(X_train,X_test,y_train,y_test) .

将这样的矩阵赋予lstm模型是否可以?因为我的表现很差 . 从我所看到的情况来看,人们只提供1D或2D数据,然后在给lstm层提供3D输入后重新整形数据 .

使用lstm的代码是这样的:

input_shape=(X_train.shape[1], X_train.shape[2]) #(5,500), i.e timesteps and features
model = Sequential()
model.add(LSTM(20, return_sequences=True))
model.add(LSTM(20))
model.add(Dense(1))
model.compile(loss='mae', optimizer='adam')

我更改了LSTM图层中的单元格数和层数,但得分基本相同(0.19) . 在我的情况下得分如此糟糕是正常的吗?还有更好的方法吗?

谢谢

1 回答

  • 1

    通过将数据转换为(样本,5,500),您可以获得LSTM 5个时间步长和500个功能 . 根据您的数据,您似乎希望处理每列的所有500行和5个要素以进行预测 . LSTM输入是(样本,时间步长,功能) . 因此,如果您的行代表进行5次测量的时间步长,那么您需要置换最后2个维度并在第一个LSTM层中设置 input_shape=(500, 5) .

    此外,由于您的输出是布尔值,您可以通过在最终密集层中使用 activation='sigmoid' 获得更稳定的训练,并使用 loss='binary_crossentropy 进行二进制分类 .

相关问题