1D CNN使用张量流keras分类问题



我一直在尝试使用1D CNN来解决简单的分类问题。比如在csv中创建一个表格数据,并将其输入到python中进行一些简单的分类。数据的前31列是特征,最后一列是条件。我一直在用其他ML方法进行分类,如Lightgbm和Randomforest。我想尝试使用1D CNN,看看准确性是否可以提高。

X = raw_data[feature_names]
P = predict_data_raw[feature_names]
P1 = predict_data_raw[feature_names1]
y = raw_data['Conditions']
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=22, test_size=0.1)

model = Sequential()
model.add(Conv1D(filters=32, kernel_size=3, activation='relu'))
model.add(LayerNormalization())
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(LayerNormalization())
model.add(GlobalAveragePooling1D())
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(2, activation='softmax'))
model.compile(loss='loss_function', optimizer='adam', metrics=['accuracy'])

我想输出预测结果和条件的预测概率。然而,训练在某些方面停滞不前,并显示出这个错误:

ValueError: Exception encountered when calling layer "sequential_26" (type Sequential).
Input 0 of layer "conv1d_33" is incompatible with the layer: expected min_ndim=3, found ndim=2. Full shape received: (None, 31)
Call arguments received by layer "sequential_26" (type Sequential):
• inputs=tf.Tensor(shape=(None, 31), dtype=float64)
• training=True
• mask=None

Conv1D需要3维输入,而您的输入只是2维。您可以重塑数据或添加Reshape层:

model = Sequential()
model.add(Reshape((31, 1))
...

您可能需要添加一个input_shape

最新更新