python-3.x - keras lstm 性能不佳

标签 python-3.x performance keras lstm

我想创建一个 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

对于每个文件,有一个输出是 bool 值(真或假)。形状是 (1,)

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

然后我拆分数据(X_train、X_test、y_train、y_test)。

把这样的矩阵给lstm模型可以吗?因为我的表现很差。据我所见,人们只提供 1D 或 2D 数据,然后他们 reshape 数据以向 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)。在我的情况下有这么差的分数是否正常?有更好的方法吗?

谢谢

最佳答案

通过将您的数据转换为 (samples, 5, 500),您可以为 LSTM 提供 5 个时间步长和 500 个特征。从您的数据来看,您似乎希望处理每列的所有 500 行和 5 个特征以进行预测。 LSTM输入是(样本、时间步长、特征)。因此,如果您的行表示进行 5 次测量的时间步长,那么您需要排列最后 2 个维度并设置 input_shape=(500, 5)在第一个 LSTM 层。

此外,由于您的输出是 bool 值,因此您可以使用 activation='sigmoid' 获得更稳定的训练。在最后的密集层中并使用 loss='binary_crossentropy 进行训练用于二元分类。

关于python-3.x - keras lstm 性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50463633/

相关文章:

machine-learning - 使用 Keras 创建可以生成新的相似数据的模型

keras - Keras 的中心损失

python - 尝试创建一个简单的成绩册程序

r - 优化 sapply() 或 for()、paste(),以有效地将稀疏三元组矩阵转换为 libsvm 格式

python-3.x - 在函数 'cv::cvtColor' 中打开 Cv 错误 : (-215:Assertion failed) ! _src.empty()

javascript - Angularjs ui-router,当嵌套变得太多时

html - Dart 中的 Canvas 性能

tensorflow - KERAS model.summary 中的 "None"是什么意思?

python - 如何从链接列表中抓取?

python-3.x - 如何将字节数据转换为 python pandas 数据帧?