Home > Back-end >  How to increase the accuracy of this CNN Model?
How to increase the accuracy of this CNN Model?

Time:03-28

I have tried many combinations in the values for this model.

  1. Can 2D Convolutions be used instead of 1D for the following case?
  2. How can accuracy be improved for the training dataset?

shape of original dataset : (343889, 80)

shape of - training dataset : (257916, 80)

shape of - training Labels : (257916,)

shape of - testing dataset : (85973, 80)

shape of - testing Labels : (85973,)

The model is

inputShape = (80,1,)
model = Sequential()
model.add(Input(shape=inputShape))
model.add(Conv1D(filters=80, kernel_size=30, activation='relu'))
model.add(MaxPooling1D(40))
model.add(Dense(60))
model.add(Dense(9))
model.compile(optimizer='adam', loss='binary_crossentropy',
              metrics=['accuracy'])

Model's summary

Model: "sequential_11"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv1d_11 (Conv1D)          (None, 51, 80)            2480      
                                                                 
 max_pooling1d_9 (MaxPooling  (None, 1, 80)            0         
 1D)                                                             
                                                                 
 dense_8 (Dense)             (None, 1, 60)             4860      
                                                                 
 dense_9 (Dense)             (None, 1, 9)              549       
                                                                 
=================================================================
Total params: 7,889
Trainable params: 7,889
Non-trainable params: 0
_________________________________________________________________

The training is given below.

Epoch 1/5
8060/8060 [==============================] - 56s 7ms/step - loss: -25.7724 - accuracy: 0.0015
Epoch 2/5
8060/8060 [==============================] - 44s 5ms/step - loss: -26.7578 - accuracy: 0.0011
Epoch 3/5
8060/8060 [==============================] - 43s 5ms/step - loss: -26.7578 - accuracy: 0.0011

CodePudding user response:

You can try a couple of things to adjust your model performance.

  • Firstly Try Using Conv2D layers
  • Modify kernel size to (3,3)
  • Change optimiser to SGD and loss to Sparse Categorical Crossentropy Try the following, run the model for a longer epoch and let's see how that goes.

CodePudding user response:

Since you want to classify something, your model is not doing so (at least not directly).

The problems I can see at first sight are:

  • You use no activation functions (especially in the last layer)
  • You use 9 output neurons, but binary crossentropy loss.

First of all, in your shoes, I would revise the classification problems with neural network.

About your model, a starting point could be this edit

inputShape = (80,1,)
model = Sequential()
model.add(Conv1D(filters=80, kernel_size=30, activation='relu', input_shape = inputShape))
model.add(MaxPooling1D(40))
model.add(Dense(60), activation='relu') # note activation function
model.add(Dense(9), activation='softmax') # note activation function
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy',
              metrics=['accuracy']) # note the loss function

I am not saying this is going to solve your problem (without knowing data it is impossible) but it is a start, then you have to work on fighting overfitting, hyperparameters tuning, etc.

  • Related