Search code examples
tensorflowtensorflow2.0sequentialconv-neural-network

What values should i provide to my model.sequential() for 500*500*3 image? (CNN)


I purpose of using CNN is to use my 500*500*3 images of car logos to detect car brands.

model = models.Sequential()
model.add(layers.Conv2D(16, (5, 5), activation='relu', input_shape=(500, 500, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(16, (5, 5),activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(16, (5, 5),activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(16, (5, 5),activation='relu'))
model.summary()

I tweeked almost everything there but my accuracy is always low.

model.add(layers.Flatten())
model.add(layers.Dense(16, activation='relu'))
model.add(layers.Dense(4))
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])
history = model.fit(train_images, train_labels, epochs=10, 
                    validation_data=(test_images, test_labels))

Train on 40 samples, validate on 20 samples

Epoch 1/10
40/40 [==============================] - 16s 389ms/sample - loss: 1.4333 - acc: 0.1500 - val_loss: 1.3755 - val_acc: 0.2000
Epoch 2/10
40/40 [==============================] - 15s 378ms/sample - loss: 1.3396 - acc: 0.3750 - val_loss: 1.3578 - val_acc: 0.2000
Epoch 3/10
40/40 [==============================] - 15s 378ms/sample - loss: 1.3015 - acc: 0.5500 - val_loss: 1.3506 - val_acc: 0.3000
Epoch 4/10
40/40 [==============================] - 15s 380ms/sample - loss: 1.2058 - acc: 0.4750 - val_loss: 1.4039 - val_acc: 0.3000
Epoch 5/10
40/40 [==============================] - 15s 378ms/sample - loss: 1.0369 - acc: 0.7750 - val_loss: 1.4080 - val_acc: 0.2500
Epoch 6/10
40/40 [==============================] - 15s 378ms/sample - loss: 0.8541 - acc: 0.8250 - val_loss: 1.6827 - val_acc: 0.2000
Epoch 7/10
40/40 [==============================] - 15s 382ms/sample - loss: 0.6846 - acc: 0.8000 - val_loss: 2.1517 - val_acc: 0.2500
Epoch 8/10
40/40 [==============================] - 15s 378ms/sample - loss: 0.4774 - acc: 0.8750 - val_loss: 2.9194 - val_acc: 0.2000
Epoch 9/10
40/40 [==============================] - 15s 378ms/sample - loss: 0.3912 - acc: 0.8750 - val_loss: 4.0575 - val_acc: 0.3500
Epoch 10/10
40/40 [==============================] - 15s 378ms/sample - loss: 0.3832 - acc: 0.8750 - val_loss: 3.7391 - val_acc: 0.4000

Please help me!!


Solution

  • Training with 500*500*3 is not gonna do you any good. CNN will spend time studying less important features. Optimum size is 64*64. You can use pre trained models like VGGNET,RESNET to increase your accuracy to above 90%. Already there is a project which I have seen before which is doing the similar thing Github link