1D CNN(Keras)的输入形状

3
我将使用Keras构建一个卷积神经网络,以下是我的第一层Conv1D:

我正在使用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数据框,包含两列。对于每一行,label是一个整数(0或1),payload是一个浮点数ndarray,用零填充/截断到长度为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)

有什么想法吗?

尝试 input_shape=(1000,) - Mete Han Kahraman
1个回答

2
我将input_shape设置为(1000, 1)。
在fit()中输入的数据我也转换成了一个包含n个ndarray的单个ndarray(每个ndarray都是由1000个浮点数组成的向量,n是样本/向量的总数),并在预处理过程中将这些ndarray的形状重塑为(1, 1000, 1),在阅读了这篇关于输入和输入形状的解释后进行的。
我的输入数据的最终形状为(15641, 1000, 1)。
如果指定了验证数据,所有这些操作也应该适用于验证数据。
这解决了我的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接