python - 使用 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% 左右,这意味着不存在二元分类器。
如果有人能告诉我可能是什么问题,我将不胜感激。这是否是由于增强方法产生的数据质量差而发生的?还是与网络本身有关?提前致谢
解决方案
如果是两个类之间的分类,则应使用 binary_crossentropy 作为损失函数。
推荐阅读
- visual-studio-code - 保存文件后光标在空行时跳转到第一列
- javascript - 文本中包含超过 1 个大写字符且带有正则表达式的所有单词
- python - Python SQL 脚本 - 如何发送有错误的电子邮件
- racket - 如何在 Racket 中计算浮点模数?[flmod]
- javascript - 在 AmCharts 中切换到 JSON 数据不起作用
- java - lang.NoClassDefFoundError:无法初始化类 jtermios.windows.WinAPI
- next.js - 没有默认登录页面的下一个 Auth 电子邮件凭据
- r - 时空包的问题
- python - 在 Windows 中使用 Apache + mod_wsgi + Python Django 的 408 请求超时
- javascript - 如何从另一个 javascript 文件调用 javascript 函数