CloudL2
CloudL2

Reputation: 1

CNN model did not learn anything from the training data. Where are the mistakes I made?

The shape of the train/test data is (samples, 256, 256, 1). The training dataset has around 1400 samples, the validation dataset has 150 samples, and the test dataset has 250 samples. Then I build a CNN model for a six-object classification task. However, no matter how hard I tuning the parameters and add/remove layers(conv&dense), I get a chance level of accuracy all the time (around 16.5%). Thus, I would like to know whether I made some deadly mistakes while building the model. Or there is something wrong with the data itself, not the CNN model.

Code:

def build_cnn_model(input_shape, activation='relu'):
    model = Sequential()
    # 3 Convolution layer with Max polling
    model.add(Conv2D(64, (5, 5), activation=activation, padding = 'same', input_shape=input_shape))
    model.add(MaxPooling2D((2, 2)))
    model.add(Conv2D(128, (5, 5), activation=activation, padding = 'same'))
    model.add(MaxPooling2D((2, 2)))
    model.add(Conv2D(256, (5, 5), activation=activation, padding = 'same'))
    model.add(MaxPooling2D((2, 2)))
    model.add(Flatten())

    # 3 Full connected layer
    model.add(Dense(1024, activation = activation))
    model.add(Dropout(0.5))
    model.add(Dense(512, activation = activation))
    model.add(Dropout(0.5))
    model.add(Dense(6, activation = 'softmax')) # 6 classes

    # summarize the model
    print(model.summary())
    return model
def compile_and_fit_model(model, X_train, y_train, X_vali, y_vali, batch_size, n_epochs, LR=0.01):
    # compile the model
    model.compile(
        optimizer=tf.keras.optimizers.Adam(learning_rate=LR),
        loss='sparse_categorical_crossentropy',
        metrics=['sparse_categorical_accuracy'])

    # fit the model
    history = model.fit(x=X_train,
                        y=y_train,
                        batch_size=batch_size,
                        epochs=n_epochs,
                        verbose=1,
                        validation_data=(X_vali, y_vali))
    return model, history

I transformed the MEG data my professor recorded into Magnitude Scalogram using CWT. pywt.cwt(data, scales, wavelet) was used. And if I plot the coefficients I got from cwt, I will have a graph like this (I emerged 62 channels into one graph). enter image description here

I used the coefficients as train/test data for the CNN model. However, I tuned the parameters and tried to add/remove layers for the CNN model, and the classification accuracy was unchanged. Thus, I want to know where I made mistakes. Did I make mistakes with building the CNN model, or did I make mistakes with CWT (the way I handled data)?

Please give me some advices, thank you.

Upvotes: 0

Views: 157

Answers (1)

steflbert
steflbert

Reputation: 116

How is the accuracy of the training data? If you have a small dataset and the model does not overfit after training for a while, then something is wrong with the model. You can also test with existing datasets, which the model should be able to handle (like Fashion MNIST).

Testing if you handled the data correctly is harder. Did you write unit tests for the different steps in the preprocessing pipeline?

Upvotes: 0

Related Questions