【问题标题】:How to format a 1D Time Series Array for a 1D CNN in Keras如何在 Keras 中为一维 CNN 格式化一维时间序列数组
【发布时间】:2021-09-06 13:23:47
【问题描述】:

我在尝试为一维化学反应数据数组训练一维 CNN 时遇到了麻烦。我的数据是 (21000, 1),其中每个样本都被标记为三个类别之一。我已按如下方式重塑了我的 X_train。

X_train = X_train.reshape(21000, 1, 1)

下面是我的第一个 CNN 层。

model.add(layers.Conv1D(filters=64, kernel_size=2, activation='relu',
                        input_shape=(21000, 1)))
model.add(layers.MaxPooling1D(pool_size=2))

模型似乎可以编译,但是当我尝试拟合它时,出现以下错误。

ValueError: Negative dimension size caused by subtracting 2 from 1 for '{{node sequential_16/conv1d_28/conv1d}} = Conv2D[T=DT_FLOAT, data_format="NHWC", dilations=[1, 1, 1, 1], explicit_paddings=[], padding="VALID", strides=[1, 1, 1, 1], use_cudnn_on_gpu=true](sequential_16/conv1d_28/conv1d/ExpandDims, sequential_16/conv1d_28/conv1d/ExpandDims_1)' with input shapes: [4,1,1,1], [1,2,1,64].

任何帮助将不胜感激。

【问题讨论】:

  • 您不能使用长度为 1 的序列的内核大小为 2。

标签: python tensorflow keras conv-neural-network


【解决方案1】:

考虑查看 Conv1D 层的documentation

你的一维卷积层应该遵循这种格式:

所以不要像这样重塑你的数组:

X_train = X_train.reshape(21000, 1, 1)

试试这个:

X_train = X_train.reshape(1, 21000, 1)

(但一般会考虑更大的batch size)

X_train = X_train.reshape(1, 21000, 1)
model.add(layers.Conv1D(filters=64, kernel_size=2, activation='relu', input_shape =(21000, 1)))
model.add(layers.MaxPooling1D(pool_size=2))

但是,当查看您的错误时,正如@Shubham 所指出的,您可能在此层之前遇到问题,您正在尝试转换输入 [1,1,1,1]

输出 [1,2,1,64]

你通过神经网络缩小了太多信号

【讨论】:

  • 我已经对我的数据进行了一些调整,看看是否可以解决问题,但现在我又遇到了另一个错误。 ValueError: Shapes (1, 1) and (1, 3) are incompatible 由于每组 7000 个读数对应一个样本,因此我将其重新整形为 (3, 7000) 而我的标签是 (3,1)。
  • 如果您的标签是 (3,1),您可能需要 3 个神经元作为网络的输出,但是看看您的错误,我认为您只输出 1 个值(1 个神经元)
猜你喜欢
  • 2021-05-02
  • 2020-11-15
  • 2014-12-29
  • 1970-01-01
  • 2019-12-05
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多