import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.utils import to_categorical
import numpy as np
import matplotlib.pyplot as plt
tf.random.set_seed(7)
mnist = keras.datasets.mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 0s 0us/step
from tensorflow.keras.utils import to_categorical
mean = np.mean(X_train)
stddev = np.std(X_train)
X_train = (X_train - mean)/stddev
X_test = (X_test - mean)/stddev
y_train = to_categorical(y_train, num_classes=10)
y_test = to_categorical(y_test, num_classes=10)
init = keras.initializers.RandomUniform(minval=-0.1, maxval=0.1)
X_train.shape
y_train.shape
y_test.shape
from tensorflow.keras import layers
EPOCHS = 20
model = keras.Sequential([
layers.Flatten(input_shape=(28,28)),
layers.Dense(25, activation = 'tanh', kernel_initializer = init, bias_initializer = 'zeros'),
layers.Dense(10, activation = 'sigmoid', kernel_initializer = init, bias_initializer = 'zeros')
])
optimizer = keras.optimizers.SGD(learning_rate=0.01)
model.compile(loss=tf.keras.losses.mean_squared_error, metrics=['accuracy'], optimizer = optimizer)
history = model.fit(X_train, y_train, validation_data = (X_test, y_test), epochs = EPOCHS, batch_size=1, verbose = 2, shuffle= True)
Epoch 1/20
60000/60000 - 50s - loss: 0.0493 - accuracy: 0.7168 - val_loss: 0.0242 - val_accuracy: 0.9007
Epoch 2/20
60000/60000 - 50s - loss: 0.0200 - accuracy: 0.9038 - val_loss: 0.0165 - val_accuracy: 0.9185
Epoch 3/20
60000/60000 - 48s - loss: 0.0158 - accuracy: 0.9161 - val_loss: 0.0143 - val_accuracy: 0.9238
Epoch 4/20
60000/60000 - 48s - loss: 0.0141 - accuracy: 0.9230 - val_loss: 0.0132 - val_accuracy: 0.9256
Epoch 5/20
60000/60000 - 47s - loss: 0.0130 - accuracy: 0.9279 - val_loss: 0.0124 - val_accuracy: 0.9286
Epoch 6/20
60000/60000 - 46s - loss: 0.0123 - accuracy: 0.9312 - val_loss: 0.0119 - val_accuracy: 0.9317
Epoch 7/20
60000/60000 - 46s - loss: 0.0117 - accuracy: 0.9340 - val_loss: 0.0115 - val_accuracy: 0.9333
Epoch 8/20
60000/60000 - 47s - loss: 0.0113 - accuracy: 0.9365 - val_loss: 0.0112 - val_accuracy: 0.9343
Epoch 9/20
60000/60000 - 46s - loss: 0.0109 - accuracy: 0.9383 - val_loss: 0.0110 - val_accuracy: 0.9370
Epoch 10/20
60000/60000 - 47s - loss: 0.0105 - accuracy: 0.9401 - val_loss: 0.0108 - val_accuracy: 0.9369
Epoch 11/20
60000/60000 - 47s - loss: 0.0103 - accuracy: 0.9414 - val_loss: 0.0106 - val_accuracy: 0.9376
Epoch 12/20
60000/60000 - 47s - loss: 0.0100 - accuracy: 0.9423 - val_loss: 0.0106 - val_accuracy: 0.9373
Epoch 13/20
60000/60000 - 47s - loss: 0.0098 - accuracy: 0.9438 - val_loss: 0.0103 - val_accuracy: 0.9391
Epoch 14/20
60000/60000 - 47s - loss: 0.0096 - accuracy: 0.9456 - val_loss: 0.0102 - val_accuracy: 0.9397
Epoch 15/20
60000/60000 - 47s - loss: 0.0094 - accuracy: 0.9462 - val_loss: 0.0103 - val_accuracy: 0.9396
Epoch 16/20
60000/60000 - 47s - loss: 0.0092 - accuracy: 0.9469 - val_loss: 0.0099 - val_accuracy: 0.9418
Epoch 17/20
60000/60000 - 47s - loss: 0.0091 - accuracy: 0.9479 - val_loss: 0.0100 - val_accuracy: 0.9391
Epoch 18/20
60000/60000 - 46s - loss: 0.0089 - accuracy: 0.9486 - val_loss: 0.0099 - val_accuracy: 0.9425
Epoch 19/20
60000/60000 - 48s - loss: 0.0088 - accuracy: 0.9495 - val_loss: 0.0100 - val_accuracy: 0.9405
Epoch 20/20
60000/60000 - 58s - loss: 0.0087 - accuracy: 0.9507 - val_loss: 0.0097 - val_accuracy: 0.9438