I have been trying to use 1D CNN to do simple classification problems. Such as creating a tabular data in csv and input it into python to do some simple classifications. First 31 columns of the data are the features and the last column is the condition. I have been doing classification with other ML method such as Lightgbm and Randomforest. I want to try using 1D CNN and see whether the accuracy can be improved.
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'])
I want to output the prediction results and the prediction probabilities of the conditions. However, the training stuck at some points and show this error:
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 expects a 3-dimensional input, while your input is just 2-dimensional. You can reshape your data or add a
model = Sequential() model.add(Reshape((31, 1)) ...
You might need to add an
Answered By – AndrzejO