我正在尝试制作一个用于非图像数据集二元分类的 CNN 模型。我的模型/代码正在运行并产生非常好的结果(准确性很高),但我无法理解input_shape
第一层参数Conv1D
.
X 或输入的形状(此处x_train_df
) 为 (2000, 28)。它有 28 个特征和 2000 个样本。以及 Y 或标签的形状(此处y_train_df
) 是 (2000, 1)。
model = Sequential()
model.add(Conv1D(filters = 64, kernel_size = 3, activation = 'relu', input_shape = (x_train_df.shape[1], 1)))
model.add(Conv1D(filters = 64, kernel_size = 3, activation = 'relu'))
model.add(MaxPooling1D(pool_size = 2))
model.add(Flatten())
model.add(Dense(100, activation = 'relu'))
model.add(Dense(1, activation = 'sigmoid'))
optimzr = Adam(learning_rate=0.005)
model.compile(loss='binary_crossentropy', optimizer=optimzr, metrics=[[tf.keras.metrics.AUC(curve="ROC", name = 'auc')], [tf.keras.metrics.AUC(curve="PR", name = 'pr')]])
# running the fitting
model.fit(x_train_df, y_train_df, epochs = 2, batch_size = 32, validation_data = (x_val_df, y_val_df), verbose = 2)
我给了input_shape
作为 (28, 1) (参考自这个问题 https://stackoverflow.com/questions/61030068/keras-cnn-with-1d-data).
But in Conv1D 层文档 https://keras.io/api/layers/convolution_layers/convolution1d/文中写道,
当使用该层作为模型中的第一层时,请提供
input_shape 参数(整数元组或 None,例如 (10, 128) 表示
的序列128维向量的10个向量.
我从中了解到的是 input_shape 的维度应该是 (2000, 1) 因为我有 2000 个一维向量。但将此作为input_shape
显示错误为,
ValueError:层“sequential_25”的输入 0 与
层:预期形状=(无,2000,1),发现形状=(无,28)
所以我的问题是什么应该是正确的input_shape
?