首页 > 解决方案 > 使用 CNN 进行时间序列分类

问题描述

我正在尝试构建一个卷积神经网络,将时间序列数据分为两类。目前我只有一个小数据集,所以我首先需要扩充我的数据集,以便将它们输入网络。对于数据增强任务,我在https://github.com/uchidalab/time_series_augmentation找到了一些非常有用的方法存储库。到目前为止,我尝试的是在我的数据中添加一些高斯噪声、置换方法、时间扭曲、窗口切片和窗口扭曲方法。这些方法被应用于 (batch, batch_rows, channels)=(354, 400, 3) 数据集以生成 (1770, 400, 3) 数据集(包括训练和测试数据集及其相应的标签)。鉴于我的输入数量有限,我想知道您是否对 1D CNN 结构有任何建议,以便在这些数据集上获得良好的性能。到目前为止,我尝试过的是这个网络:

verbose, epochs, batch_size = 0, 10, 8
n_timesteps, n_features, n_outputs = trainX.shape[1], trainX.shape[2], trainy.shape[1]

model = Sequential()
model.add(Conv1D(filters=16, kernel_size=3, activation='relu', input_shape=(n_timesteps,n_features)))

model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(n_outputs, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

# fit network
model.fit(trainX, trainy, epochs=epochs, batch_size=batch_size, verbose=verbose)

# evaluate model
_, accuracy = model.evaluate(testX, testy, batch_size=batch_size, verbose=0)

无论我对参数和超参数进行什么更改,我的准确率总是在 50% 左右,这意味着不存在二元分类器。

如果有人能告诉我可能是什么问题,我将不胜感激。这是否是由于增强方法产生的数据质量差而发生的?还是与网络本身有关?提前致谢

标签: pythontensorflowconv-neural-network

解决方案


如果是两个类之间的分类,则应使用 binary_crossentropy 作为损失函数。


推荐阅读