pythontensorflowmachine-learningkeras

Neural network low accuracy


The model is getting really low accuracy. This is my first time writing a neural network so I dont really know how to make it better

import tensorflow as tf
import matplotlib.pyplot as plt
    
#data set
data = tf.keras.datasets.cifar10


(x_train, y_train), (x_test, y_test) = data.load_data()
plt.imshow(x_train[0], cmap=plt.cm.binary)

#normalize data
x_train = tf.keras.utils.normalize(x_train, axis=1)
x_test = tf.keras.utils.normalize(x_test, axis=1)

#building AI model

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(10, activation=tf.nn.softmax))



#compile model
model.compile(optimizer='adam',
             loss='sparse_categorical_crossentropy',
             metrics=['accuracy'])

plt.show()
#train AI model
model.fit(x_train, y_train, epochs=3)

Solution

  • I ran your model and got 50% accuracy by increasing the number of epochs to about 30.

    Coin-toss accuracy is 10%, so your model is much better than chance.

    To improve the model architecture, adding convolutional layers will help a lot. Convolutional Neural Networks are the state of the art for image classificayion and you should read up on them if you want to understand computer vision.

    model = tf.keras.models.Sequential()
    # the next two lines add convolution layers to your code above
    model.add(tf.keras.layers.Conv2D(6, 3, strides=(1, 1), padding="valid"))
    model.add(tf.keras.layers.Conv2D(10, 5))
    model.add(tf.keras.layers.Flatten())
    

    Running this for 12 epochs gets to 78% accuracy on my local machine and it has not finished learning.