【发布时间】:2020-12-06 19:21:56
【问题描述】:
我是 Keras 和 CNN 的新手,我不明白如何正确构建 CNN 网络。
上下文: 我使用 39 个特征的时间序列,我想使用 3 个滞后数据。另外,我的问题是多步输出,所以我想预测 48 个输出。 我使用 TimeseriesGenerator 创建模型输入(使用 this article for reference)。
这是我的代码:
generator = TimeseriesGenerator(
inputs,
outputs,
length=6,
batch_size=1,
)
这是我的模型构建:
model = Sequential()
model.add(
Conv1D(
filters=64,
kernel_size=5,
strides=1,
activation="relu",
padding="valid",
input_shape=(6, 39),
use_bias=True,
)
)
model.add(MaxPooling1D(pool_size=2))
model.add(
Conv1D(
filters=64,
kernel_size=5,
strides=1,
activation="relu",
padding="valid",
use_bias=True,
)
)
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(units=100, activation="relu",))
model.add(Dense(units=self.__n_steps_out, activation="softmax",))
model.compile(
optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"]
)
model.fit_generator(
generator, steps_per_epoch=1, epochs=100,
)
问题: 我知道内核大小(具有有效填充)不能高于 ts 生成器中指定的滞后数。 但是在设置内核大小=5 时出现尺寸错误
ValueError: Negative dimension size caused by subtracting 5 from 1 for '{{node conv1d_1/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](conv1d_1/conv1d/ExpandDims, conv1d_1/conv1d/ExpandDims_1)' with input shapes: [?,1,1,64], [1,5,64,64].
我发现我的 CNN 结构只有在 kernel_size 设置为 2 时才是正确的,不明白为什么它在工作,但当我增加值时却不是......
谁能解释一下 TimeseriesGenerator 和 Conv1D 层的输入和输出?
【问题讨论】:
标签: python tensorflow keras time-series