## Issue

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.

- When training a model, make sure to let it run until your loss function plateaus.

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

- Always make sure to understand what would be "good" or "bad" accuracy for your dataset.

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.

- Use convolutional NNs when handling images.

Answered By – philosofool

**This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 **