3

我正在使用 Keras 构建一个 CNN,并将以下 Conv1D 作为我的第一层:

cnn.add(Conv1D(
    filters=512,
    kernel_size=3,
    strides=2,
    activation=hyperparameters["activation_fn"],
    kernel_regularizer=getattr(regularizers, hyperparameters["regularization"])(hyperparameters["regularization_rate"]),
    input_shape=(1000, 1),
))

我正在使用以下功能进行培训:

cnn.fit(
    x=train_df["payload"].tolist(),
    y=train_df["label"].tolist(),
    batch_size=hyperparameters["batch_size"],
    epochs=hyperparameters["epochs"],
)

其中 train_df 是一个包含两列的 pandas 数据帧,其中,对于每一行,标签是一个 int(0 或 1),有效负载是一个用零填充/截断为 1000 长度的浮点数组。 train_df 是 15641。

模型编译,但在训练期间,我收到此错误:

ValueError: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 1 array(s), but instead got the following list of 15641 arrays: [array([[0.09019608],
   [0.01176471],
   [0.01176471],
   [0.        ],
   [0.30196078],
   [0.        ],
   [0.        ],
   [0.        ],
   [0.        ],
   [0....

我查看了这篇文章并尝试将我的输入更改为 1000 个浮点长列表的 ndarray,但最终出现了另一个错误:

ValueError: Error when checking input: expected conv1d_1_input to have 3 dimensions, but got array with shape (15641, 1000)

有任何想法吗?

4

1 回答 1

2

所以我将 input_shape 设置为 (1000, 1)

我还将提供给 fit() 的输入转换为单个 ndarray 的 n ndarrays(每个 ndarray 是 1000 个浮点数的向量,n 是样本/向量的总数)并将这些 ndarray 中的每一个重新整形为 (1, 1000, 1) 在阅读关于输入和输入形状的说明后进行预处理期间

我的输入数据的最终形状是 (15641, 1000, 1)

所有这些都应该适用于验证数据(如果指定)。

这解决了我的问题

于 2018-11-27T02:09:35.527 回答