jony
jony

Reputation: 944

traning MNIST model with proper hyper params in Python

here is my code, i don't know why it gives me 0.3% accuracy

can anyone tell me what is the problem with this code?

def train_mnist():

    mnist = tf.keras.datasets.mnist

    (x_train, y_train), (x_test, y_test) = mnist.load_data()
    x_train, x_test = x_train / 255.0, x_test / 255.0

    model = tf.keras.models.Sequential([
      tf.keras.layers.Flatten(input_shape=(28, 28)),
      tf.keras.layers.Dense(128, activation='relu'),
      tf.keras.layers.Dropout(0.2),
      tf.keras.layers.Dense(10)
    ])

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


    history = model.fit(x_train, y_train, epochs=5)

    return history.epoch, history.history['acc'][-1]

train_mnist()

thanks in Adavnce

Upvotes: 0

Views: 85

Answers (2)

Shubham Shaswat
Shubham Shaswat

Reputation: 1310

The problem seem to be your loss function

Try this:

Method 1

You could use categorical_crossentropy as loss but the last layer should be

tf.keras.layers.Dense(10,activation='softmax')

and then

model.compile(optimizer = 'adam', 
              loss"categorical_crossentropy", 
              metrics=["accuracy"])

Method 2

In your case, the sparse_categorical_crossentropy loss need to define

tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True,name='sparse_categorical_crossentropy')

To understand the difference b\w these two see this

Upvotes: 1

Coder
Coder

Reputation: 1121

this will work! try this

loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)


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

Upvotes: 1

Related Questions