【发布时间】:2021-12-31 20:31:39
【问题描述】:
我正在尝试为非图像数据集的二进制分类制作 CNN 模型。我的模型/代码正在运行并产生非常好的结果(准确度很高),但我无法理解Conv1D 第一层的input_shape 参数。
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)(参考自 this question)。
但是在Conv1D layer documentation 中是这样写的,
当将此层用作模型中的第一层时,请提供 input_shape 参数(整数元组或无,例如 (10, 128) 为 128维向量的10个向量序列。
我从中了解到的是 input_shape 的维度应该是 (2000, 1) 因为我有 2000 个一维向量。但是将其设为input_shape 会显示错误,
ValueError: 层“sequential_25”的输入 0 与 层:预期形状=(无,2000,1),找到形状=(无,28)
所以我的问题是正确的input_shape 应该是什么?
【问题讨论】:
-
你能说出你的 input_shape (2000,1) 的数据集形状是什么吗?
-
如果您的数据集形状为 (2000, 1)=(batch_size, row) 与 input_shape(2000, 1) 不正确。因此,必须对数据集进行整形 (batch_size, 2000, 1)。
-
我原始输入的形状是 (2000, 28)。假设批量大小为 1,使其 (1, 2000, 28) 显示错误。请查看对答案的评论。
标签: python tensorflow keras conv-neural-network