In [1]:
from tensorflow.keras.datasets import mnist
import tensorflow as tf
import numpy as np
from Lect10Utils import fit_evaluation
import matplotlib.pyplot as plt

from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras import optimizers
from tensorflow.keras import regularizers
from tensorflow.data import Dataset
In [8]:
#start with 10000 training samples and 10000 test samples
n_train_samples = 60000
n_test_samples = 10000
batch_size = 32

(train_x,train_y),(test_x,test_y) = mnist.load_data()

train_x = train_x.reshape(n_train_samples,28*28).astype("float64")/255

test_x  = test_x.reshape(n_test_samples,28*28).astype("float64")/255

#create training data set - batch size = 32
train_ds = Dataset.from_tensor_slices((train_x, train_y)).batch(batch_size)
test_ds  = Dataset.from_tensor_slices((test_x,test_y)).batch(batch_size)
test_1d_32_ds = test_ds

#create ptraining, validation, and testing datasets
val_split = 0.10
train_ds_size = len(list(train_ds))
val_ds_size   = int(val_split*train_ds_size)
ptrain_ds_size = train_ds_size-val_ds_size
print(f"training batches = {train_ds_size}, validation batches = {val_ds_size}, ptraining  batches = {ptrain_ds_size}")

ptrain_ds = train_ds.take(ptrain_ds_size)
val_ds = train_ds.skip(ptrain_ds_size).take(val_ds_size)
training batches = 1875, validation batches = 187, ptraining  batches = 1688
2025-02-09 16:14:16.832468: I tensorflow/core/framework/local_rendezvous.cc:405] Local rendezvous is aborting with status: OUT_OF_RANGE: End of sequence
In [3]:
n_hidden1 = 512
n_hidden2 = 128

inputs = keras.Input(shape=(28*28,))
x = layers.Dense(n_hidden1, activation="relu",
                 kernel_regularizer= None,
                 )(inputs)
x = layers.Dense(n_hidden2,activation="relu",
                 kernel_regularizer = None,
                 )(x)

outputs = layers.Dense(10, activation="softmax")(x)
model = keras.Model(inputs=inputs, outputs=outputs)

model.summary()
Model: "functional"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type)                    ┃ Output Shape           ┃       Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ input_layer (InputLayer)        │ (None, 784)            │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense (Dense)                   │ (None, 512)            │       401,920 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_1 (Dense)                 │ (None, 128)            │        65,664 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_2 (Dense)                 │ (None, 10)             │         1,290 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
 Total params: 468,874 (1.79 MB)
 Trainable params: 468,874 (1.79 MB)
 Non-trainable params: 0 (0.00 B)
In [4]:
rmsprop = optimizers.RMSprop(
    learning_rate=0.001,  # Starting learning rate
    rho=0.9,  # Equivalent to decay factor
    momentum=0.7,  # Adds momentum to updates
    epsilon=1e-7,  # Helps with numerical stability 1e-7
    centered=True  # Normalizes gradients (unique to TensorFlow)
)

model.compile(optimizer=rmsprop,
              loss = "sparse_categorical_crossentropy",
              metrics = ["accuracy"])
In [43]:
#create a callback to save the best model with respect to validatioh loss
filename = "models/lecture10_case1.keras"
callbacks = [
    keras.callbacks.ModelCheckpoint(
        filepath = filename,
        save_best_only = True,
        monitor = "val_loss")]

#train model with ptraining data, and use val_ds for validation 
number_epochs = 50

history = model.fit(ptrain_ds, epochs = number_epochs,
                    validation_data = val_ds,
                    callbacks = callbacks)
Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9033 - loss: 0.3281 - val_accuracy: 0.9651 - val_loss: 0.1245
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9641 - loss: 0.1476 - val_accuracy: 0.9691 - val_loss: 0.1383
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9723 - loss: 0.1283 - val_accuracy: 0.9626 - val_loss: 0.1819
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9759 - loss: 0.1189 - val_accuracy: 0.9728 - val_loss: 0.1595
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9792 - loss: 0.1187 - val_accuracy: 0.9693 - val_loss: 0.1804
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9822 - loss: 0.0945 - val_accuracy: 0.9669 - val_loss: 0.2464
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9834 - loss: 0.0935 - val_accuracy: 0.9671 - val_loss: 0.2772
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9854 - loss: 0.0865 - val_accuracy: 0.9693 - val_loss: 0.2422
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9868 - loss: 0.0814 - val_accuracy: 0.9726 - val_loss: 0.2890
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9874 - loss: 0.0769 - val_accuracy: 0.9758 - val_loss: 0.2438
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9893 - loss: 0.0622 - val_accuracy: 0.9751 - val_loss: 0.3393
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9890 - loss: 0.0759 - val_accuracy: 0.9774 - val_loss: 0.2812
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9907 - loss: 0.0583 - val_accuracy: 0.9741 - val_loss: 0.3311
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9904 - loss: 0.0636 - val_accuracy: 0.9796 - val_loss: 0.2108
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9915 - loss: 0.0510 - val_accuracy: 0.9788 - val_loss: 0.2916
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9922 - loss: 0.0515 - val_accuracy: 0.9788 - val_loss: 0.2836
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9929 - loss: 0.0509 - val_accuracy: 0.9806 - val_loss: 0.2489
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9927 - loss: 0.0457 - val_accuracy: 0.9801 - val_loss: 0.3142
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9930 - loss: 0.0469 - val_accuracy: 0.9821 - val_loss: 0.3089
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9946 - loss: 0.0440 - val_accuracy: 0.9781 - val_loss: 0.3735
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9948 - loss: 0.0392 - val_accuracy: 0.9789 - val_loss: 0.3855
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9941 - loss: 0.0428 - val_accuracy: 0.9811 - val_loss: 0.3262
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9957 - loss: 0.0306 - val_accuracy: 0.9815 - val_loss: 0.2965
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9965 - loss: 0.0236 - val_accuracy: 0.9831 - val_loss: 0.3169
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9968 - loss: 0.0224 - val_accuracy: 0.9799 - val_loss: 0.3356
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9971 - loss: 0.0212 - val_accuracy: 0.9826 - val_loss: 0.3319
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9962 - loss: 0.0234 - val_accuracy: 0.9809 - val_loss: 0.4086
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9965 - loss: 0.0303 - val_accuracy: 0.9816 - val_loss: 0.3121
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9972 - loss: 0.0190 - val_accuracy: 0.9831 - val_loss: 0.3020
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9973 - loss: 0.0179 - val_accuracy: 0.9798 - val_loss: 0.4408
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9969 - loss: 0.0201 - val_accuracy: 0.9813 - val_loss: 0.4204
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9970 - loss: 0.0200 - val_accuracy: 0.9811 - val_loss: 0.3854
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9984 - loss: 0.0103 - val_accuracy: 0.9831 - val_loss: 0.3351
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9975 - loss: 0.0196 - val_accuracy: 0.9826 - val_loss: 0.4208
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9979 - loss: 0.0174 - val_accuracy: 0.9841 - val_loss: 0.3610
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9985 - loss: 0.0115 - val_accuracy: 0.9826 - val_loss: 0.3808
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9984 - loss: 0.0113 - val_accuracy: 0.9820 - val_loss: 0.4028
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9985 - loss: 0.0111 - val_accuracy: 0.9823 - val_loss: 0.4289
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9982 - loss: 0.0137 - val_accuracy: 0.9813 - val_loss: 0.4039
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9985 - loss: 0.0103 - val_accuracy: 0.9826 - val_loss: 0.4122
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9988 - loss: 0.0092 - val_accuracy: 0.9808 - val_loss: 0.4387
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9985 - loss: 0.0103 - val_accuracy: 0.9828 - val_loss: 0.4394
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9987 - loss: 0.0101 - val_accuracy: 0.9825 - val_loss: 0.4373
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9987 - loss: 0.0090 - val_accuracy: 0.9831 - val_loss: 0.4393
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9992 - loss: 0.0068 - val_accuracy: 0.9836 - val_loss: 0.4252
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9986 - loss: 0.0105 - val_accuracy: 0.9843 - val_loss: 0.3998
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9992 - loss: 0.0059 - val_accuracy: 0.9843 - val_loss: 0.3415
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9991 - loss: 0.0050 - val_accuracy: 0.9823 - val_loss: 0.4701
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9987 - loss: 0.0097 - val_accuracy: 0.9816 - val_loss: 0.4499
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9992 - loss: 0.0051 - val_accuracy: 0.9833 - val_loss: 0.4469
In [19]:
fit_evaluation(history,filename,val_ds)
187/187 ━━━━━━━━━━━━━━━━━━━━ 0s 912us/step - accuracy: 0.9646 - loss: 0.1090
No description has been provided for this image
In [9]:
batch_size = 1024
case_number = 2
filename = f"models/lecture10_case{case_number}.keras"

#create training data set - batch size = 1024
train_ds = Dataset.from_tensor_slices((train_x, train_y)).batch(batch_size)
test_ds  = Dataset.from_tensor_slices((test_x,test_y)).batch(batch_size)
test_1d_1024_ds = test_ds

#create ptraining, validation, and testing datasets
val_split = 0.10
train_ds_size = len(list(train_ds))
val_ds_size   = int(val_split*train_ds_size)
ptrain_ds_size = train_ds_size-val_ds_size
print(f"training batches = {train_ds_size}, validation batches = {val_ds_size}, ptraining  batches = {ptrain_ds_size}")

ptrain_ds = train_ds.take(ptrain_ds_size)
val_ds = train_ds.skip(ptrain_ds_size).take(val_ds_size)
training batches = 59, validation batches = 5, ptraining  batches = 54
In [6]:
tf.keras.backend.clear_session()

#rebuild the model so the weights are randomly initialized
n_hidden1 = 512
n_hidden2 = 128

inputs = keras.Input(shape=(28*28,))
x = layers.Dense(n_hidden1, activation="relu",
                 kernel_regularizer= None,
                 )(inputs)
x = layers.Dense(n_hidden2,activation="relu",
                 kernel_regularizer = None,
                 )(x)

outputs = layers.Dense(10, activation="softmax")(x)
model = keras.Model(inputs=inputs, outputs=outputs)

#recompile model with rmsprop optimizer

rmsprop = optimizers.RMSprop(
    learning_rate=0.001,  # Starting learning rate
    rho=0.9,  # Equivalent to decay factor
    momentum=0.7,  # Adds momentum to updates
    epsilon=1e-7,  # Helps with numerical stability 1e-7
    centered=True  # Normalizes gradients (unique to TensorFlow)
)

model.compile(optimizer=rmsprop,
              loss = "sparse_categorical_crossentropy",
              metrics = ["accuracy"])

#create a callback to save the best model with respect to validatioh loss

callbacks = [
    keras.callbacks.ModelCheckpoint(
        filepath = filename,
        save_best_only = True,
        monitor = "val_loss")]

#train model with ptraining data, and use val_ds for validation 
number_epochs = 50

history = model.fit(ptrain_ds, epochs = number_epochs,
                    validation_data = val_ds,
                    callbacks = callbacks)

#evaluate 
fit_evaluation(history,filename,val_ds)
Epoch 1/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.7685 - loss: 0.7371 - val_accuracy: 0.9622 - val_loss: 0.1342
Epoch 2/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9552 - loss: 0.1472 - val_accuracy: 0.9734 - val_loss: 0.0973
Epoch 3/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9731 - loss: 0.0890 - val_accuracy: 0.9764 - val_loss: 0.0824
Epoch 4/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9825 - loss: 0.0585 - val_accuracy: 0.9753 - val_loss: 0.0812
Epoch 5/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9869 - loss: 0.0440 - val_accuracy: 0.9722 - val_loss: 0.1001
Epoch 6/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9876 - loss: 0.0392 - val_accuracy: 0.9641 - val_loss: 0.1351
Epoch 7/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9887 - loss: 0.0324 - val_accuracy: 0.9681 - val_loss: 0.1252
Epoch 8/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9921 - loss: 0.0248 - val_accuracy: 0.9770 - val_loss: 0.1000
Epoch 9/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9930 - loss: 0.0216 - val_accuracy: 0.9736 - val_loss: 0.1201
Epoch 10/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9942 - loss: 0.0174 - val_accuracy: 0.9800 - val_loss: 0.0907
Epoch 11/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9947 - loss: 0.0164 - val_accuracy: 0.9773 - val_loss: 0.1185
Epoch 12/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9956 - loss: 0.0126 - val_accuracy: 0.9800 - val_loss: 0.1072
Epoch 13/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9950 - loss: 0.0141 - val_accuracy: 0.9811 - val_loss: 0.0917
Epoch 14/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9972 - loss: 0.0084 - val_accuracy: 0.9804 - val_loss: 0.1112
Epoch 15/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9970 - loss: 0.0080 - val_accuracy: 0.9743 - val_loss: 0.1449
Epoch 16/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9965 - loss: 0.0104 - val_accuracy: 0.9813 - val_loss: 0.0999
Epoch 17/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9980 - loss: 0.0054 - val_accuracy: 0.9815 - val_loss: 0.1082
Epoch 18/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9975 - loss: 0.0074 - val_accuracy: 0.9800 - val_loss: 0.1173
Epoch 19/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9986 - loss: 0.0043 - val_accuracy: 0.9813 - val_loss: 0.1207
Epoch 20/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9994 - loss: 0.0022 - val_accuracy: 0.9819 - val_loss: 0.1217
Epoch 21/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9986 - loss: 0.0035 - val_accuracy: 0.9807 - val_loss: 0.1247
Epoch 22/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9989 - loss: 0.0037 - val_accuracy: 0.9824 - val_loss: 0.1115
Epoch 23/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9992 - loss: 0.0023 - val_accuracy: 0.9832 - val_loss: 0.1113
Epoch 24/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9989 - loss: 0.0027 - val_accuracy: 0.9807 - val_loss: 0.1377
Epoch 25/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9990 - loss: 0.0030 - val_accuracy: 0.9777 - val_loss: 0.1513
Epoch 26/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9987 - loss: 0.0040 - val_accuracy: 0.9830 - val_loss: 0.1191
Epoch 27/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9992 - loss: 0.0024 - val_accuracy: 0.9828 - val_loss: 0.1393
Epoch 28/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9991 - loss: 0.0025 - val_accuracy: 0.9834 - val_loss: 0.1148
Epoch 29/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9995 - loss: 0.0020 - val_accuracy: 0.9815 - val_loss: 0.1280
Epoch 30/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9994 - loss: 0.0016 - val_accuracy: 0.9830 - val_loss: 0.1326
Epoch 31/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9993 - loss: 0.0015 - val_accuracy: 0.9851 - val_loss: 0.1193
Epoch 32/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9991 - loss: 0.0033 - val_accuracy: 0.9828 - val_loss: 0.1397
Epoch 33/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9993 - loss: 0.0022 - val_accuracy: 0.9849 - val_loss: 0.1092
Epoch 34/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9998 - loss: 7.5360e-04 - val_accuracy: 0.9832 - val_loss: 0.1396
Epoch 35/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9994 - loss: 0.0022 - val_accuracy: 0.9830 - val_loss: 0.1396
Epoch 36/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9998 - loss: 7.4426e-04 - val_accuracy: 0.9847 - val_loss: 0.1257
Epoch 37/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9999 - loss: 6.7500e-04 - val_accuracy: 0.9845 - val_loss: 0.1269
Epoch 38/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9999 - loss: 1.4924e-04 - val_accuracy: 0.9853 - val_loss: 0.1178
Epoch 39/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 1.0000 - loss: 3.4956e-05 - val_accuracy: 0.9862 - val_loss: 0.1198
Epoch 40/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 1.0000 - loss: 1.5096e-05 - val_accuracy: 0.9862 - val_loss: 0.1198
Epoch 41/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 1.0000 - loss: 1.2641e-05 - val_accuracy: 0.9860 - val_loss: 0.1200
Epoch 42/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 1.0000 - loss: 1.1357e-05 - val_accuracy: 0.9860 - val_loss: 0.1203
Epoch 43/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 1.0000 - loss: 1.0423e-05 - val_accuracy: 0.9860 - val_loss: 0.1205
Epoch 44/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 1.0000 - loss: 9.6892e-06 - val_accuracy: 0.9860 - val_loss: 0.1208
Epoch 45/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 1.0000 - loss: 9.0895e-06 - val_accuracy: 0.9862 - val_loss: 0.1210
Epoch 46/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 1.0000 - loss: 8.5831e-06 - val_accuracy: 0.9862 - val_loss: 0.1212
Epoch 47/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 1.0000 - loss: 8.1472e-06 - val_accuracy: 0.9862 - val_loss: 0.1214
Epoch 48/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 1.0000 - loss: 7.7647e-06 - val_accuracy: 0.9862 - val_loss: 0.1216
Epoch 49/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 1.0000 - loss: 7.4259e-06 - val_accuracy: 0.9862 - val_loss: 0.1218
Epoch 50/50
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 1.0000 - loss: 7.1216e-06 - val_accuracy: 0.9862 - val_loss: 0.1220
5/5 ━━━━━━━━━━━━━━━━━━━━ 0s 7ms/step - accuracy: 0.9755 - loss: 0.0771  
No description has been provided for this image
In [8]:
tf.keras.backend.clear_session()
case_number = 3
filename = f"models/lecture10_case{case_number}.keras"

#rebuild the model so the weights are randomly initialized
n_hidden1 = 512
n_hidden2 = 128

lam = 0.01
L2_regularizer = regularizers.l2(lam)

inputs = keras.Input(shape=(28*28,))
x = layers.Dense(n_hidden1, activation="relu",
                 kernel_regularizer= L2_regularizer,
                 )(inputs)
x = layers.Dense(n_hidden2,activation="relu",
                 kernel_regularizer = L2_regularizer,
                 )(x)

outputs = layers.Dense(10, activation="softmax")(x)
model = keras.Model(inputs=inputs, outputs=outputs)

#recompile model with rmsprop optimizer

rmsprop = optimizers.RMSprop(
    learning_rate=0.001,  # Starting learning rate
    rho=0.9,  # Equivalent to decay factor
    momentum=0.7,  # Adds momentum to updates
    epsilon=1e-7,  # Helps with numerical stability 1e-7
    centered=True  # Normalizes gradients (unique to TensorFlow)
)

model.compile(optimizer=rmsprop,
              loss = "sparse_categorical_crossentropy",
              metrics = ["accuracy"])

#create a callback to save the best model with respect to validatioh loss

callbacks = [
    keras.callbacks.ModelCheckpoint(
        filepath = filename,
        save_best_only = True,
        monitor = "val_loss")]

#train model with ptraining data, and use val_ds for validation 
number_epochs = 100

history = model.fit(ptrain_ds, epochs = number_epochs,
                    validation_data = val_ds,
                    callbacks = callbacks)

#evaluate 
fit_evaluation(history,filename,val_ds)
Epoch 1/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.7482 - loss: 4.2485 - val_accuracy: 0.9330 - val_loss: 0.7088
Epoch 2/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9040 - loss: 0.7255 - val_accuracy: 0.9401 - val_loss: 0.5453
Epoch 3/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9138 - loss: 0.5939 - val_accuracy: 0.9507 - val_loss: 0.4761
Epoch 4/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9224 - loss: 0.5379 - val_accuracy: 0.9503 - val_loss: 0.4470
Epoch 5/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9271 - loss: 0.5014 - val_accuracy: 0.9568 - val_loss: 0.4112
Epoch 6/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9336 - loss: 0.4687 - val_accuracy: 0.9605 - val_loss: 0.3887
Epoch 7/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9380 - loss: 0.4420 - val_accuracy: 0.9626 - val_loss: 0.3679
Epoch 8/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9413 - loss: 0.4202 - val_accuracy: 0.9643 - val_loss: 0.3508
Epoch 9/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9438 - loss: 0.4021 - val_accuracy: 0.9639 - val_loss: 0.3388
Epoch 10/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9468 - loss: 0.3863 - val_accuracy: 0.9651 - val_loss: 0.3276
Epoch 11/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9486 - loss: 0.3723 - val_accuracy: 0.9664 - val_loss: 0.3163
Epoch 12/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9499 - loss: 0.3598 - val_accuracy: 0.9677 - val_loss: 0.3081
Epoch 13/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9521 - loss: 0.3480 - val_accuracy: 0.9688 - val_loss: 0.2990
Epoch 14/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9533 - loss: 0.3383 - val_accuracy: 0.9707 - val_loss: 0.2910
Epoch 15/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9547 - loss: 0.3282 - val_accuracy: 0.9711 - val_loss: 0.2850
Epoch 16/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9565 - loss: 0.3203 - val_accuracy: 0.9713 - val_loss: 0.2781
Epoch 17/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9578 - loss: 0.3124 - val_accuracy: 0.9719 - val_loss: 0.2737
Epoch 18/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9580 - loss: 0.3067 - val_accuracy: 0.9719 - val_loss: 0.2700
Epoch 19/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9581 - loss: 0.3018 - val_accuracy: 0.9717 - val_loss: 0.2654
Epoch 20/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9591 - loss: 0.2970 - val_accuracy: 0.9711 - val_loss: 0.2628
Epoch 21/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9593 - loss: 0.2925 - val_accuracy: 0.9732 - val_loss: 0.2594
Epoch 22/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9599 - loss: 0.2876 - val_accuracy: 0.9719 - val_loss: 0.2562
Epoch 23/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9610 - loss: 0.2840 - val_accuracy: 0.9728 - val_loss: 0.2545
Epoch 24/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9613 - loss: 0.2809 - val_accuracy: 0.9726 - val_loss: 0.2517
Epoch 25/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9613 - loss: 0.2776 - val_accuracy: 0.9732 - val_loss: 0.2494
Epoch 26/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9619 - loss: 0.2744 - val_accuracy: 0.9726 - val_loss: 0.2474
Epoch 27/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9621 - loss: 0.2717 - val_accuracy: 0.9736 - val_loss: 0.2436
Epoch 28/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9623 - loss: 0.2693 - val_accuracy: 0.9741 - val_loss: 0.2420
Epoch 29/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9627 - loss: 0.2664 - val_accuracy: 0.9741 - val_loss: 0.2401
Epoch 30/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9629 - loss: 0.2646 - val_accuracy: 0.9739 - val_loss: 0.2399
Epoch 31/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9632 - loss: 0.2628 - val_accuracy: 0.9741 - val_loss: 0.2366
Epoch 32/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9636 - loss: 0.2599 - val_accuracy: 0.9741 - val_loss: 0.2346
Epoch 33/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9637 - loss: 0.2579 - val_accuracy: 0.9736 - val_loss: 0.2358
Epoch 34/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9642 - loss: 0.2557 - val_accuracy: 0.9722 - val_loss: 0.2340
Epoch 35/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9648 - loss: 0.2544 - val_accuracy: 0.9734 - val_loss: 0.2314
Epoch 36/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9645 - loss: 0.2524 - val_accuracy: 0.9758 - val_loss: 0.2303
Epoch 37/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9648 - loss: 0.2507 - val_accuracy: 0.9741 - val_loss: 0.2296
Epoch 38/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9646 - loss: 0.2503 - val_accuracy: 0.9747 - val_loss: 0.2284
Epoch 39/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9652 - loss: 0.2487 - val_accuracy: 0.9743 - val_loss: 0.2272
Epoch 40/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9652 - loss: 0.2479 - val_accuracy: 0.9743 - val_loss: 0.2273
Epoch 41/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9650 - loss: 0.2472 - val_accuracy: 0.9756 - val_loss: 0.2264
Epoch 42/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9648 - loss: 0.2459 - val_accuracy: 0.9760 - val_loss: 0.2240
Epoch 43/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9645 - loss: 0.2455 - val_accuracy: 0.9753 - val_loss: 0.2228
Epoch 44/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9650 - loss: 0.2446 - val_accuracy: 0.9747 - val_loss: 0.2244
Epoch 45/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9660 - loss: 0.2433 - val_accuracy: 0.9749 - val_loss: 0.2231
Epoch 46/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9652 - loss: 0.2416 - val_accuracy: 0.9747 - val_loss: 0.2234
Epoch 47/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9656 - loss: 0.2407 - val_accuracy: 0.9745 - val_loss: 0.2217
Epoch 48/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9662 - loss: 0.2397 - val_accuracy: 0.9747 - val_loss: 0.2222
Epoch 49/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9651 - loss: 0.2400 - val_accuracy: 0.9760 - val_loss: 0.2219
Epoch 50/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9655 - loss: 0.2386 - val_accuracy: 0.9751 - val_loss: 0.2222
Epoch 51/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9654 - loss: 0.2376 - val_accuracy: 0.9747 - val_loss: 0.2198
Epoch 52/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9657 - loss: 0.2359 - val_accuracy: 0.9751 - val_loss: 0.2203
Epoch 53/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9662 - loss: 0.2366 - val_accuracy: 0.9751 - val_loss: 0.2197
Epoch 54/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9663 - loss: 0.2349 - val_accuracy: 0.9745 - val_loss: 0.2228
Epoch 55/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9656 - loss: 0.2350 - val_accuracy: 0.9732 - val_loss: 0.2226
Epoch 56/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9668 - loss: 0.2330 - val_accuracy: 0.9734 - val_loss: 0.2222
Epoch 57/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9659 - loss: 0.2333 - val_accuracy: 0.9730 - val_loss: 0.2211
Epoch 58/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9660 - loss: 0.2331 - val_accuracy: 0.9730 - val_loss: 0.2207
Epoch 59/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9676 - loss: 0.2323 - val_accuracy: 0.9730 - val_loss: 0.2219
Epoch 60/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9661 - loss: 0.2318 - val_accuracy: 0.9730 - val_loss: 0.2199
Epoch 61/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 20ms/step - accuracy: 0.9669 - loss: 0.2308 - val_accuracy: 0.9749 - val_loss: 0.2182
Epoch 62/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9663 - loss: 0.2304 - val_accuracy: 0.9739 - val_loss: 0.2210
Epoch 63/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9670 - loss: 0.2289 - val_accuracy: 0.9732 - val_loss: 0.2198
Epoch 64/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9665 - loss: 0.2312 - val_accuracy: 0.9690 - val_loss: 0.2310
Epoch 65/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9667 - loss: 0.2302 - val_accuracy: 0.9722 - val_loss: 0.2238
Epoch 66/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9668 - loss: 0.2297 - val_accuracy: 0.9700 - val_loss: 0.2331
Epoch 67/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9668 - loss: 0.2280 - val_accuracy: 0.9730 - val_loss: 0.2195
Epoch 68/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9667 - loss: 0.2275 - val_accuracy: 0.9732 - val_loss: 0.2231
Epoch 69/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9670 - loss: 0.2285 - val_accuracy: 0.9739 - val_loss: 0.2222
Epoch 70/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9680 - loss: 0.2256 - val_accuracy: 0.9730 - val_loss: 0.2222
Epoch 71/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9673 - loss: 0.2258 - val_accuracy: 0.9726 - val_loss: 0.2245
Epoch 72/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9672 - loss: 0.2258 - val_accuracy: 0.9734 - val_loss: 0.2228
Epoch 73/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9676 - loss: 0.2248 - val_accuracy: 0.9732 - val_loss: 0.2175
Epoch 74/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 20ms/step - accuracy: 0.9684 - loss: 0.2224 - val_accuracy: 0.9722 - val_loss: 0.2189
Epoch 75/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9681 - loss: 0.2233 - val_accuracy: 0.9730 - val_loss: 0.2180
Epoch 76/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9678 - loss: 0.2223 - val_accuracy: 0.9724 - val_loss: 0.2187
Epoch 77/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9677 - loss: 0.2223 - val_accuracy: 0.9728 - val_loss: 0.2204
Epoch 78/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9668 - loss: 0.2227 - val_accuracy: 0.9713 - val_loss: 0.2190
Epoch 79/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9680 - loss: 0.2228 - val_accuracy: 0.9726 - val_loss: 0.2177
Epoch 80/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9675 - loss: 0.2222 - val_accuracy: 0.9726 - val_loss: 0.2171
Epoch 81/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9674 - loss: 0.2216 - val_accuracy: 0.9743 - val_loss: 0.2158
Epoch 82/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9678 - loss: 0.2208 - val_accuracy: 0.9722 - val_loss: 0.2206
Epoch 83/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9681 - loss: 0.2206 - val_accuracy: 0.9734 - val_loss: 0.2145
Epoch 84/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9680 - loss: 0.2208 - val_accuracy: 0.9732 - val_loss: 0.2153
Epoch 85/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9671 - loss: 0.2212 - val_accuracy: 0.9734 - val_loss: 0.2161
Epoch 86/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9679 - loss: 0.2193 - val_accuracy: 0.9743 - val_loss: 0.2116
Epoch 87/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9684 - loss: 0.2189 - val_accuracy: 0.9726 - val_loss: 0.2150
Epoch 88/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9685 - loss: 0.2185 - val_accuracy: 0.9753 - val_loss: 0.2095
Epoch 89/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9687 - loss: 0.2180 - val_accuracy: 0.9717 - val_loss: 0.2186
Epoch 90/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9682 - loss: 0.2181 - val_accuracy: 0.9722 - val_loss: 0.2132
Epoch 91/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9684 - loss: 0.2170 - val_accuracy: 0.9736 - val_loss: 0.2097
Epoch 92/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9684 - loss: 0.2156 - val_accuracy: 0.9741 - val_loss: 0.2109
Epoch 93/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9679 - loss: 0.2160 - val_accuracy: 0.9764 - val_loss: 0.2060
Epoch 94/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9675 - loss: 0.2159 - val_accuracy: 0.9739 - val_loss: 0.2123
Epoch 95/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9685 - loss: 0.2158 - val_accuracy: 0.9770 - val_loss: 0.2070
Epoch 96/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9685 - loss: 0.2155 - val_accuracy: 0.9747 - val_loss: 0.2077
Epoch 97/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9685 - loss: 0.2145 - val_accuracy: 0.9756 - val_loss: 0.2086
Epoch 98/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9674 - loss: 0.2180 - val_accuracy: 0.9743 - val_loss: 0.2116
Epoch 99/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9687 - loss: 0.2149 - val_accuracy: 0.9732 - val_loss: 0.2101
Epoch 100/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9688 - loss: 0.2132 - val_accuracy: 0.9719 - val_loss: 0.2105
5/5 ━━━━━━━━━━━━━━━━━━━━ 0s 7ms/step - accuracy: 0.9750 - loss: 0.2066  
No description has been provided for this image
In [9]:
tf.keras.backend.clear_session()
case_number = 4
filename = f"models/lecture10_case{case_number}.keras"

#rebuild the model so the weights are randomly initialized
n_hidden1 = 512
n_hidden2 = 128

lam = 0.002
L2_regularizer = regularizers.l2(lam)

inputs = keras.Input(shape=(28*28,))
x = layers.Dense(n_hidden1, activation="relu",
                 kernel_regularizer= L2_regularizer,
                 )(inputs)
x = layers.Dense(n_hidden2,activation="relu",
                 kernel_regularizer = L2_regularizer,
                 )(x)

outputs = layers.Dense(10, activation="softmax")(x)
model = keras.Model(inputs=inputs, outputs=outputs)

#recompile model with rmsprop optimizer

rmsprop = optimizers.RMSprop(
    learning_rate=0.001,  # Starting learning rate
    rho=0.9,  # Equivalent to decay factor
    momentum=0.7,  # Adds momentum to updates
    epsilon=1e-7,  # Helps with numerical stability 1e-7
    centered=True  # Normalizes gradients (unique to TensorFlow)
)

model.compile(optimizer=rmsprop,
              loss = "sparse_categorical_crossentropy",
              metrics = ["accuracy"])

#create a callback to save the best model with respect to validatioh loss

callbacks = [
    keras.callbacks.ModelCheckpoint(
        filepath = filename,
        save_best_only = True,
        monitor = "val_loss")]

#train model with ptraining data, and use val_ds for validation 
number_epochs = 100

history = model.fit(ptrain_ds, epochs = number_epochs,
                    validation_data = val_ds,
                    callbacks = callbacks)

#evaluate 
fit_evaluation(history,filename,val_ds)
Epoch 1/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.7641 - loss: 1.9124 - val_accuracy: 0.9545 - val_loss: 0.5453
Epoch 2/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9407 - loss: 0.5244 - val_accuracy: 0.9668 - val_loss: 0.3457
Epoch 3/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 20ms/step - accuracy: 0.9523 - loss: 0.3679 - val_accuracy: 0.9711 - val_loss: 0.2815
Epoch 4/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9574 - loss: 0.3119 - val_accuracy: 0.9751 - val_loss: 0.2516
Epoch 5/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9608 - loss: 0.2838 - val_accuracy: 0.9745 - val_loss: 0.2369
Epoch 6/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9638 - loss: 0.2642 - val_accuracy: 0.9743 - val_loss: 0.2329
Epoch 7/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9667 - loss: 0.2499 - val_accuracy: 0.9745 - val_loss: 0.2288
Epoch 8/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9683 - loss: 0.2364 - val_accuracy: 0.9749 - val_loss: 0.2202
Epoch 9/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9697 - loss: 0.2253 - val_accuracy: 0.9764 - val_loss: 0.2112
Epoch 10/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9714 - loss: 0.2157 - val_accuracy: 0.9764 - val_loss: 0.2053
Epoch 11/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9732 - loss: 0.2085 - val_accuracy: 0.9764 - val_loss: 0.2000
Epoch 12/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9742 - loss: 0.2016 - val_accuracy: 0.9756 - val_loss: 0.1985
Epoch 13/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9747 - loss: 0.1963 - val_accuracy: 0.9768 - val_loss: 0.1924
Epoch 14/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9761 - loss: 0.1898 - val_accuracy: 0.9762 - val_loss: 0.1890
Epoch 15/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9768 - loss: 0.1851 - val_accuracy: 0.9768 - val_loss: 0.1895
Epoch 16/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9765 - loss: 0.1828 - val_accuracy: 0.9768 - val_loss: 0.1868
Epoch 17/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9768 - loss: 0.1776 - val_accuracy: 0.9775 - val_loss: 0.1857
Epoch 18/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9779 - loss: 0.1746 - val_accuracy: 0.9790 - val_loss: 0.1784
Epoch 19/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9790 - loss: 0.1713 - val_accuracy: 0.9770 - val_loss: 0.1822
Epoch 20/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9795 - loss: 0.1684 - val_accuracy: 0.9773 - val_loss: 0.1782
Epoch 21/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9807 - loss: 0.1661 - val_accuracy: 0.9781 - val_loss: 0.1750
Epoch 22/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9799 - loss: 0.1640 - val_accuracy: 0.9773 - val_loss: 0.1794
Epoch 23/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9799 - loss: 0.1617 - val_accuracy: 0.9764 - val_loss: 0.1785
Epoch 24/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9803 - loss: 0.1602 - val_accuracy: 0.9762 - val_loss: 0.1777
Epoch 25/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9803 - loss: 0.1582 - val_accuracy: 0.9766 - val_loss: 0.1719
Epoch 26/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 20ms/step - accuracy: 0.9808 - loss: 0.1556 - val_accuracy: 0.9781 - val_loss: 0.1756
Epoch 27/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9812 - loss: 0.1540 - val_accuracy: 0.9760 - val_loss: 0.1771
Epoch 28/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9799 - loss: 0.1560 - val_accuracy: 0.9773 - val_loss: 0.1728
Epoch 29/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9809 - loss: 0.1519 - val_accuracy: 0.9773 - val_loss: 0.1713
Epoch 30/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9812 - loss: 0.1507 - val_accuracy: 0.9773 - val_loss: 0.1695
Epoch 31/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9813 - loss: 0.1495 - val_accuracy: 0.9751 - val_loss: 0.1722
Epoch 32/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9809 - loss: 0.1509 - val_accuracy: 0.9751 - val_loss: 0.1739
Epoch 33/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9822 - loss: 0.1464 - val_accuracy: 0.9766 - val_loss: 0.1702
Epoch 34/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9823 - loss: 0.1458 - val_accuracy: 0.9764 - val_loss: 0.1722
Epoch 35/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9818 - loss: 0.1444 - val_accuracy: 0.9751 - val_loss: 0.1696
Epoch 36/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9810 - loss: 0.1463 - val_accuracy: 0.9751 - val_loss: 0.1736
Epoch 37/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9804 - loss: 0.1484 - val_accuracy: 0.9758 - val_loss: 0.1680
Epoch 38/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9826 - loss: 0.1415 - val_accuracy: 0.9756 - val_loss: 0.1704
Epoch 39/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9815 - loss: 0.1445 - val_accuracy: 0.9758 - val_loss: 0.1648
Epoch 40/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9822 - loss: 0.1409 - val_accuracy: 0.9722 - val_loss: 0.1729
Epoch 41/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9811 - loss: 0.1441 - val_accuracy: 0.9753 - val_loss: 0.1641
Epoch 42/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9803 - loss: 0.1445 - val_accuracy: 0.9745 - val_loss: 0.1675
Epoch 43/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9822 - loss: 0.1411 - val_accuracy: 0.9739 - val_loss: 0.1652
Epoch 44/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9829 - loss: 0.1381 - val_accuracy: 0.9753 - val_loss: 0.1636
Epoch 45/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9829 - loss: 0.1373 - val_accuracy: 0.9758 - val_loss: 0.1643
Epoch 46/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9818 - loss: 0.1389 - val_accuracy: 0.9730 - val_loss: 0.1678
Epoch 47/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9826 - loss: 0.1357 - val_accuracy: 0.9728 - val_loss: 0.1673
Epoch 48/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9823 - loss: 0.1383 - val_accuracy: 0.9711 - val_loss: 0.1812
Epoch 49/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9817 - loss: 0.1379 - val_accuracy: 0.9760 - val_loss: 0.1631
Epoch 50/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9827 - loss: 0.1343 - val_accuracy: 0.9734 - val_loss: 0.1700
Epoch 51/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9838 - loss: 0.1317 - val_accuracy: 0.9751 - val_loss: 0.1654
Epoch 52/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9826 - loss: 0.1360 - val_accuracy: 0.9734 - val_loss: 0.1682
Epoch 53/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9829 - loss: 0.1352 - val_accuracy: 0.9696 - val_loss: 0.1776
Epoch 54/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9822 - loss: 0.1362 - val_accuracy: 0.9747 - val_loss: 0.1654
Epoch 55/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9837 - loss: 0.1321 - val_accuracy: 0.9758 - val_loss: 0.1616
Epoch 56/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9824 - loss: 0.1344 - val_accuracy: 0.9756 - val_loss: 0.1619
Epoch 57/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9831 - loss: 0.1335 - val_accuracy: 0.9724 - val_loss: 0.1674
Epoch 58/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9834 - loss: 0.1307 - val_accuracy: 0.9724 - val_loss: 0.1689
Epoch 59/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9842 - loss: 0.1292 - val_accuracy: 0.9751 - val_loss: 0.1622
Epoch 60/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9810 - loss: 0.1350 - val_accuracy: 0.9728 - val_loss: 0.1703
Epoch 61/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9842 - loss: 0.1278 - val_accuracy: 0.9773 - val_loss: 0.1545
Epoch 62/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9837 - loss: 0.1283 - val_accuracy: 0.9766 - val_loss: 0.1551
Epoch 63/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9839 - loss: 0.1269 - val_accuracy: 0.9700 - val_loss: 0.1726
Epoch 64/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9828 - loss: 0.1307 - val_accuracy: 0.9730 - val_loss: 0.1619
Epoch 65/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9835 - loss: 0.1287 - val_accuracy: 0.9756 - val_loss: 0.1566
Epoch 66/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9834 - loss: 0.1285 - val_accuracy: 0.9747 - val_loss: 0.1615
Epoch 67/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9833 - loss: 0.1291 - val_accuracy: 0.9749 - val_loss: 0.1669
Epoch 68/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9828 - loss: 0.1281 - val_accuracy: 0.9756 - val_loss: 0.1578
Epoch 69/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9819 - loss: 0.1281 - val_accuracy: 0.9685 - val_loss: 0.1756
Epoch 70/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9834 - loss: 0.1252 - val_accuracy: 0.9717 - val_loss: 0.1651
Epoch 71/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9822 - loss: 0.1289 - val_accuracy: 0.9747 - val_loss: 0.1579
Epoch 72/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9842 - loss: 0.1243 - val_accuracy: 0.9751 - val_loss: 0.1564
Epoch 73/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9842 - loss: 0.1248 - val_accuracy: 0.9756 - val_loss: 0.1534
Epoch 74/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9833 - loss: 0.1256 - val_accuracy: 0.9688 - val_loss: 0.1734
Epoch 75/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9835 - loss: 0.1260 - val_accuracy: 0.9741 - val_loss: 0.1588
Epoch 76/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 20ms/step - accuracy: 0.9840 - loss: 0.1231 - val_accuracy: 0.9698 - val_loss: 0.1671
Epoch 77/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9849 - loss: 0.1221 - val_accuracy: 0.9730 - val_loss: 0.1629
Epoch 78/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9850 - loss: 0.1227 - val_accuracy: 0.9656 - val_loss: 0.1859
Epoch 79/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9830 - loss: 0.1270 - val_accuracy: 0.9715 - val_loss: 0.1684
Epoch 80/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9845 - loss: 0.1236 - val_accuracy: 0.9758 - val_loss: 0.1533
Epoch 81/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9853 - loss: 0.1206 - val_accuracy: 0.9709 - val_loss: 0.1561
Epoch 82/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9850 - loss: 0.1197 - val_accuracy: 0.9734 - val_loss: 0.1571
Epoch 83/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9839 - loss: 0.1241 - val_accuracy: 0.9728 - val_loss: 0.1669
Epoch 84/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 20ms/step - accuracy: 0.9812 - loss: 0.1276 - val_accuracy: 0.9726 - val_loss: 0.1671
Epoch 85/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9834 - loss: 0.1236 - val_accuracy: 0.9707 - val_loss: 0.1724
Epoch 86/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9844 - loss: 0.1213 - val_accuracy: 0.9753 - val_loss: 0.1526
Epoch 87/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9837 - loss: 0.1219 - val_accuracy: 0.9717 - val_loss: 0.1655
Epoch 88/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9849 - loss: 0.1205 - val_accuracy: 0.9732 - val_loss: 0.1587
Epoch 89/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9844 - loss: 0.1210 - val_accuracy: 0.9741 - val_loss: 0.1556
Epoch 90/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9826 - loss: 0.1260 - val_accuracy: 0.9741 - val_loss: 0.1572
Epoch 91/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9843 - loss: 0.1216 - val_accuracy: 0.9726 - val_loss: 0.1596
Epoch 92/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9836 - loss: 0.1234 - val_accuracy: 0.9728 - val_loss: 0.1546
Epoch 93/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9829 - loss: 0.1260 - val_accuracy: 0.9736 - val_loss: 0.1613
Epoch 94/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9832 - loss: 0.1228 - val_accuracy: 0.9751 - val_loss: 0.1528
Epoch 95/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9824 - loss: 0.1265 - val_accuracy: 0.9732 - val_loss: 0.1579
Epoch 96/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9857 - loss: 0.1197 - val_accuracy: 0.9743 - val_loss: 0.1568
Epoch 97/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9849 - loss: 0.1198 - val_accuracy: 0.9675 - val_loss: 0.1694
Epoch 98/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9836 - loss: 0.1234 - val_accuracy: 0.9660 - val_loss: 0.1861
Epoch 99/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9834 - loss: 0.1232 - val_accuracy: 0.9702 - val_loss: 0.1670
Epoch 100/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9843 - loss: 0.1204 - val_accuracy: 0.9692 - val_loss: 0.1690
5/5 ━━━━━━━━━━━━━━━━━━━━ 0s 7ms/step - accuracy: 0.9728 - loss: 0.1521  
No description has been provided for this image
In [10]:
tf.keras.backend.clear_session()
case_number = 5
filename = f"models/lecture10_case{case_number}.keras"

#rebuild the model so the weights are randomly initialized
n_hidden1 = 512
n_hidden2 = 128

lam = 0.002
L2_regularizer = regularizers.l2(lam)

inputs = keras.Input(shape=(28*28,))
x = layers.Dense(n_hidden1, activation="relu",
                 kernel_regularizer= L2_regularizer,
                 )(inputs)
x = layers.Dense(n_hidden2,activation="relu",
                 kernel_regularizer = L2_regularizer,
                 )(x)

outputs = layers.Dense(10, activation="softmax")(x)
model = keras.Model(inputs=inputs, outputs=outputs)

model.summary()

#recompile model with rmsprop optimizer

adam = optimizers.Adam(
    learning_rate = 0.001,
    beta_1 = 0.9,
    beta_2 = 0.999,
    epsilon = 1e-7,
    amsgrad = False,
    weight_decay = None,
    ema_momentum = 0.99
)

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

#create a callback to save the best model with respect to validatioh loss

callbacks = [
    keras.callbacks.ModelCheckpoint(
        filepath = filename,
        save_best_only = True,
        monitor = "val_loss")]
Model: "functional"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type)                    ┃ Output Shape           ┃       Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ input_layer (InputLayer)        │ (None, 784)            │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense (Dense)                   │ (None, 512)            │       401,920 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_1 (Dense)                 │ (None, 128)            │        65,664 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_2 (Dense)                 │ (None, 10)             │         1,290 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
 Total params: 468,874 (1.79 MB)
 Trainable params: 468,874 (1.79 MB)
 Non-trainable params: 0 (0.00 B)
In [11]:
#train model with ptraining data, and use val_ds for validation 
number_epochs = 100

history = model.fit(ptrain_ds, epochs = number_epochs,
                    validation_data = val_ds,
                    callbacks = callbacks)

#evaluate 
fit_evaluation(history,filename,val_ds)
Epoch 1/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.7247 - loss: 2.3172 - val_accuracy: 0.9441 - val_loss: 0.9478
Epoch 2/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9291 - loss: 0.9121 - val_accuracy: 0.9615 - val_loss: 0.6494
Epoch 3/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9440 - loss: 0.6549 - val_accuracy: 0.9662 - val_loss: 0.5074
Epoch 4/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9528 - loss: 0.5191 - val_accuracy: 0.9692 - val_loss: 0.4196
Epoch 5/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9583 - loss: 0.4336 - val_accuracy: 0.9719 - val_loss: 0.3613
Epoch 6/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9624 - loss: 0.3762 - val_accuracy: 0.9743 - val_loss: 0.3211
Epoch 7/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9657 - loss: 0.3359 - val_accuracy: 0.9760 - val_loss: 0.2921
Epoch 8/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9680 - loss: 0.3062 - val_accuracy: 0.9760 - val_loss: 0.2713
Epoch 9/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9700 - loss: 0.2844 - val_accuracy: 0.9770 - val_loss: 0.2557
Epoch 10/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9710 - loss: 0.2679 - val_accuracy: 0.9781 - val_loss: 0.2438
Epoch 11/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9724 - loss: 0.2549 - val_accuracy: 0.9781 - val_loss: 0.2347
Epoch 12/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9732 - loss: 0.2445 - val_accuracy: 0.9790 - val_loss: 0.2275
Epoch 13/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9744 - loss: 0.2362 - val_accuracy: 0.9796 - val_loss: 0.2217
Epoch 14/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9752 - loss: 0.2293 - val_accuracy: 0.9809 - val_loss: 0.2163
Epoch 15/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9758 - loss: 0.2231 - val_accuracy: 0.9807 - val_loss: 0.2120
Epoch 16/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9765 - loss: 0.2178 - val_accuracy: 0.9802 - val_loss: 0.2085
Epoch 17/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9769 - loss: 0.2133 - val_accuracy: 0.9804 - val_loss: 0.2052
Epoch 18/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 15ms/step - accuracy: 0.9773 - loss: 0.2092 - val_accuracy: 0.9794 - val_loss: 0.2024
Epoch 19/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9781 - loss: 0.2055 - val_accuracy: 0.9794 - val_loss: 0.1996
Epoch 20/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9785 - loss: 0.2023 - val_accuracy: 0.9798 - val_loss: 0.1972
Epoch 21/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9789 - loss: 0.1992 - val_accuracy: 0.9796 - val_loss: 0.1948
Epoch 22/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9792 - loss: 0.1963 - val_accuracy: 0.9790 - val_loss: 0.1934
Epoch 23/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9793 - loss: 0.1939 - val_accuracy: 0.9792 - val_loss: 0.1914
Epoch 24/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9796 - loss: 0.1915 - val_accuracy: 0.9790 - val_loss: 0.1901
Epoch 25/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9799 - loss: 0.1893 - val_accuracy: 0.9792 - val_loss: 0.1885
Epoch 26/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9800 - loss: 0.1871 - val_accuracy: 0.9794 - val_loss: 0.1868
Epoch 27/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9801 - loss: 0.1850 - val_accuracy: 0.9790 - val_loss: 0.1852
Epoch 28/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9805 - loss: 0.1831 - val_accuracy: 0.9792 - val_loss: 0.1842
Epoch 29/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9807 - loss: 0.1811 - val_accuracy: 0.9798 - val_loss: 0.1825
Epoch 30/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9809 - loss: 0.1790 - val_accuracy: 0.9800 - val_loss: 0.1808
Epoch 31/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9812 - loss: 0.1770 - val_accuracy: 0.9802 - val_loss: 0.1797
Epoch 32/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9816 - loss: 0.1749 - val_accuracy: 0.9809 - val_loss: 0.1785
Epoch 33/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9819 - loss: 0.1731 - val_accuracy: 0.9811 - val_loss: 0.1775
Epoch 34/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9822 - loss: 0.1710 - val_accuracy: 0.9811 - val_loss: 0.1763
Epoch 35/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9822 - loss: 0.1694 - val_accuracy: 0.9815 - val_loss: 0.1758
Epoch 36/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9825 - loss: 0.1677 - val_accuracy: 0.9815 - val_loss: 0.1751
Epoch 37/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9827 - loss: 0.1663 - val_accuracy: 0.9813 - val_loss: 0.1738
Epoch 38/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9829 - loss: 0.1646 - val_accuracy: 0.9815 - val_loss: 0.1726
Epoch 39/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9829 - loss: 0.1629 - val_accuracy: 0.9815 - val_loss: 0.1713
Epoch 40/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9835 - loss: 0.1615 - val_accuracy: 0.9815 - val_loss: 0.1698
Epoch 41/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9838 - loss: 0.1603 - val_accuracy: 0.9815 - val_loss: 0.1692
Epoch 42/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9840 - loss: 0.1590 - val_accuracy: 0.9819 - val_loss: 0.1677
Epoch 43/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9842 - loss: 0.1573 - val_accuracy: 0.9817 - val_loss: 0.1670
Epoch 44/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9846 - loss: 0.1561 - val_accuracy: 0.9821 - val_loss: 0.1661
Epoch 45/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9848 - loss: 0.1546 - val_accuracy: 0.9821 - val_loss: 0.1652
Epoch 46/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9851 - loss: 0.1531 - val_accuracy: 0.9826 - val_loss: 0.1643
Epoch 47/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 15ms/step - accuracy: 0.9852 - loss: 0.1518 - val_accuracy: 0.9824 - val_loss: 0.1635
Epoch 48/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9857 - loss: 0.1507 - val_accuracy: 0.9817 - val_loss: 0.1625
Epoch 49/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9858 - loss: 0.1493 - val_accuracy: 0.9826 - val_loss: 0.1614
Epoch 50/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9860 - loss: 0.1481 - val_accuracy: 0.9828 - val_loss: 0.1605
Epoch 51/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9863 - loss: 0.1471 - val_accuracy: 0.9824 - val_loss: 0.1604
Epoch 52/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9864 - loss: 0.1461 - val_accuracy: 0.9826 - val_loss: 0.1595
Epoch 53/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9866 - loss: 0.1451 - val_accuracy: 0.9813 - val_loss: 0.1596
Epoch 54/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 15ms/step - accuracy: 0.9868 - loss: 0.1441 - val_accuracy: 0.9809 - val_loss: 0.1591
Epoch 55/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9868 - loss: 0.1432 - val_accuracy: 0.9815 - val_loss: 0.1589
Epoch 56/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9871 - loss: 0.1425 - val_accuracy: 0.9809 - val_loss: 0.1585
Epoch 57/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9875 - loss: 0.1415 - val_accuracy: 0.9804 - val_loss: 0.1577
Epoch 58/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9873 - loss: 0.1407 - val_accuracy: 0.9798 - val_loss: 0.1577
Epoch 59/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9875 - loss: 0.1398 - val_accuracy: 0.9811 - val_loss: 0.1569
Epoch 60/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9877 - loss: 0.1387 - val_accuracy: 0.9817 - val_loss: 0.1562
Epoch 61/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9877 - loss: 0.1381 - val_accuracy: 0.9813 - val_loss: 0.1552
Epoch 62/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9880 - loss: 0.1373 - val_accuracy: 0.9811 - val_loss: 0.1546
Epoch 63/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9880 - loss: 0.1368 - val_accuracy: 0.9807 - val_loss: 0.1543
Epoch 64/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9879 - loss: 0.1363 - val_accuracy: 0.9809 - val_loss: 0.1544
Epoch 65/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9880 - loss: 0.1359 - val_accuracy: 0.9811 - val_loss: 0.1543
Epoch 66/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9876 - loss: 0.1354 - val_accuracy: 0.9802 - val_loss: 0.1551
Epoch 67/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9870 - loss: 0.1360 - val_accuracy: 0.9781 - val_loss: 0.1572
Epoch 68/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9865 - loss: 0.1363 - val_accuracy: 0.9783 - val_loss: 0.1582
Epoch 69/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9861 - loss: 0.1373 - val_accuracy: 0.9792 - val_loss: 0.1565
Epoch 70/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9862 - loss: 0.1372 - val_accuracy: 0.9790 - val_loss: 0.1562
Epoch 71/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9864 - loss: 0.1357 - val_accuracy: 0.9787 - val_loss: 0.1532
Epoch 72/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9875 - loss: 0.1328 - val_accuracy: 0.9800 - val_loss: 0.1499
Epoch 73/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9881 - loss: 0.1300 - val_accuracy: 0.9813 - val_loss: 0.1473
Epoch 74/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9887 - loss: 0.1277 - val_accuracy: 0.9817 - val_loss: 0.1448
Epoch 75/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9892 - loss: 0.1263 - val_accuracy: 0.9830 - val_loss: 0.1439
Epoch 76/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9897 - loss: 0.1249 - val_accuracy: 0.9828 - val_loss: 0.1438
Epoch 77/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9898 - loss: 0.1246 - val_accuracy: 0.9830 - val_loss: 0.1433
Epoch 78/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9898 - loss: 0.1237 - val_accuracy: 0.9834 - val_loss: 0.1428
Epoch 79/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 19ms/step - accuracy: 0.9901 - loss: 0.1234 - val_accuracy: 0.9836 - val_loss: 0.1433
Epoch 80/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9899 - loss: 0.1232 - val_accuracy: 0.9841 - val_loss: 0.1432
Epoch 81/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9901 - loss: 0.1227 - val_accuracy: 0.9836 - val_loss: 0.1427
Epoch 82/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9901 - loss: 0.1222 - val_accuracy: 0.9834 - val_loss: 0.1428
Epoch 83/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9900 - loss: 0.1220 - val_accuracy: 0.9830 - val_loss: 0.1429
Epoch 84/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9901 - loss: 0.1214 - val_accuracy: 0.9834 - val_loss: 0.1426
Epoch 85/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9903 - loss: 0.1207 - val_accuracy: 0.9830 - val_loss: 0.1435
Epoch 86/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9907 - loss: 0.1199 - val_accuracy: 0.9821 - val_loss: 0.1428
Epoch 87/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 16ms/step - accuracy: 0.9910 - loss: 0.1187 - val_accuracy: 0.9824 - val_loss: 0.1429
Epoch 88/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9911 - loss: 0.1177 - val_accuracy: 0.9824 - val_loss: 0.1421
Epoch 89/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9912 - loss: 0.1168 - val_accuracy: 0.9828 - val_loss: 0.1410
Epoch 90/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9914 - loss: 0.1158 - val_accuracy: 0.9830 - val_loss: 0.1402
Epoch 91/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9915 - loss: 0.1148 - val_accuracy: 0.9824 - val_loss: 0.1394
Epoch 92/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9916 - loss: 0.1138 - val_accuracy: 0.9828 - val_loss: 0.1385
Epoch 93/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9913 - loss: 0.1130 - val_accuracy: 0.9828 - val_loss: 0.1380
Epoch 94/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9916 - loss: 0.1126 - val_accuracy: 0.9838 - val_loss: 0.1366
Epoch 95/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 18ms/step - accuracy: 0.9916 - loss: 0.1117 - val_accuracy: 0.9838 - val_loss: 0.1365
Epoch 96/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9918 - loss: 0.1113 - val_accuracy: 0.9843 - val_loss: 0.1363
Epoch 97/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9919 - loss: 0.1108 - val_accuracy: 0.9834 - val_loss: 0.1359
Epoch 98/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9919 - loss: 0.1103 - val_accuracy: 0.9834 - val_loss: 0.1354
Epoch 99/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9921 - loss: 0.1096 - val_accuracy: 0.9836 - val_loss: 0.1356
Epoch 100/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 1s 17ms/step - accuracy: 0.9919 - loss: 0.1095 - val_accuracy: 0.9834 - val_loss: 0.1357
5/5 ━━━━━━━━━━━━━━━━━━━━ 0s 7ms/step - accuracy: 0.9830 - loss: 0.1331  
No description has been provided for this image
In [4]:
batch_size = 1024


train_x = train_x.reshape(n_train_samples,28,28,1).astype("float64")/255

test_x  = test_x.reshape(n_test_samples,28,28,1).astype("float64")/255

#create training data set - batch size = 1024
train_ds = Dataset.from_tensor_slices((train_x, train_y)).batch(batch_size)
test_ds  = Dataset.from_tensor_slices((test_x,test_y)).batch(batch_size)
test_2d_1024_ds = test_ds

#create ptraining, validation, and testing datasets
val_split = 0.10
train_ds_size = len(list(train_ds))
val_ds_size   = int(val_split*train_ds_size)
ptrain_ds_size = train_ds_size-val_ds_size
print(f"training batches = {train_ds_size}, validation batches = {val_ds_size}, ptraining  batches = {ptrain_ds_size}")

ptrain_ds = train_ds.take(ptrain_ds_size)
val_ds = train_ds.skip(ptrain_ds_size).take(val_ds_size)
training batches = 59, validation batches = 5, ptraining  batches = 54
In [5]:
case_number = 6
filename = f"models/lecture10_case{case_number}.keras"

tf.keras.backend.clear_session()
 

lam = 0.002
L2_regularizer = regularizers.l2(lam)

inputs = keras.Input(shape=(28,28,1))
x = layers.Conv2D(filters=32, kernel_size=3, activation="relu",
                  kernel_regularizer = None,)(inputs)
x = layers.MaxPooling2D(pool_size=2)(x)
x = layers.Conv2D(filters=64, kernel_size=3, activation="relu",
                  kernel_regularizer = None,
                  )(x)
x = layers.MaxPooling2D(pool_size=2)(x)
x = layers.Flatten()(x)

outputs = layers.Dense(10, activation="softmax")(x)
model = keras.Model(inputs=inputs, outputs=outputs)

model.summary()

#recompile model with rmsprop optimizer

adam = optimizers.Adam(
    learning_rate = 0.001,
    beta_1 = 0.9,
    beta_2 = 0.999,
    epsilon = 1e-7,
    amsgrad = False,
    weight_decay = None,
    ema_momentum = 0.99
)

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

#create a callback to save the best model with respect to validatioh loss

callbacks = [
    keras.callbacks.ModelCheckpoint(
        filepath = filename,
        save_best_only = True,
        monitor = "val_loss")]

#train model with ptraining data, and use val_ds for validation 
number_epochs = 100

history = model.fit(ptrain_ds, epochs = number_epochs,
                    validation_data = val_ds,
                    callbacks = callbacks)

#evaluate 
fit_evaluation(history,filename,val_ds)
Model: "functional"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type)                    ┃ Output Shape           ┃       Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ input_layer (InputLayer)        │ (None, 28, 28, 1)      │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d (Conv2D)                 │ (None, 26, 26, 32)     │           320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d (MaxPooling2D)    │ (None, 13, 13, 32)     │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_1 (Conv2D)               │ (None, 11, 11, 64)     │        18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_1 (MaxPooling2D)  │ (None, 5, 5, 64)       │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten (Flatten)               │ (None, 1600)           │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense (Dense)                   │ (None, 10)             │        16,010 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
 Total params: 34,826 (136.04 KB)
 Trainable params: 34,826 (136.04 KB)
 Non-trainable params: 0 (0.00 B)
Epoch 1/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 123ms/step - accuracy: 0.1168 - loss: 2.3000 - val_accuracy: 0.4307 - val_loss: 2.2713
Epoch 2/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 115ms/step - accuracy: 0.4202 - loss: 2.2043 - val_accuracy: 0.6879 - val_loss: 1.7385
Epoch 3/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.6977 - loss: 1.5221 - val_accuracy: 0.8229 - val_loss: 0.8647
Epoch 4/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 123ms/step - accuracy: 0.7849 - loss: 0.8389 - val_accuracy: 0.8631 - val_loss: 0.5659
Epoch 5/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 120ms/step - accuracy: 0.8249 - loss: 0.6190 - val_accuracy: 0.8816 - val_loss: 0.4666
Epoch 6/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.8456 - loss: 0.5322 - val_accuracy: 0.8946 - val_loss: 0.4090
Epoch 7/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.8596 - loss: 0.4806 - val_accuracy: 0.9026 - val_loss: 0.3650
Epoch 8/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 121ms/step - accuracy: 0.8688 - loss: 0.4443 - val_accuracy: 0.9092 - val_loss: 0.3396
Epoch 9/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 115ms/step - accuracy: 0.8767 - loss: 0.4190 - val_accuracy: 0.9126 - val_loss: 0.3172
Epoch 10/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.8827 - loss: 0.3976 - val_accuracy: 0.9177 - val_loss: 0.2990
Epoch 11/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.8886 - loss: 0.3792 - val_accuracy: 0.9211 - val_loss: 0.2844
Epoch 12/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.8930 - loss: 0.3632 - val_accuracy: 0.9233 - val_loss: 0.2715
Epoch 13/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 119ms/step - accuracy: 0.8966 - loss: 0.3487 - val_accuracy: 0.9262 - val_loss: 0.2598
Epoch 14/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 115ms/step - accuracy: 0.9003 - loss: 0.3351 - val_accuracy: 0.9294 - val_loss: 0.2489
Epoch 15/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9046 - loss: 0.3222 - val_accuracy: 0.9328 - val_loss: 0.2387
Epoch 16/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 116ms/step - accuracy: 0.9093 - loss: 0.3099 - val_accuracy: 0.9358 - val_loss: 0.2291
Epoch 17/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 116ms/step - accuracy: 0.9127 - loss: 0.2980 - val_accuracy: 0.9392 - val_loss: 0.2201
Epoch 18/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 116ms/step - accuracy: 0.9153 - loss: 0.2867 - val_accuracy: 0.9420 - val_loss: 0.2116
Epoch 19/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 115ms/step - accuracy: 0.9188 - loss: 0.2758 - val_accuracy: 0.9430 - val_loss: 0.2035
Epoch 20/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.9223 - loss: 0.2653 - val_accuracy: 0.9477 - val_loss: 0.1959
Epoch 21/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 115ms/step - accuracy: 0.9253 - loss: 0.2553 - val_accuracy: 0.9503 - val_loss: 0.1887
Epoch 22/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 116ms/step - accuracy: 0.9286 - loss: 0.2456 - val_accuracy: 0.9511 - val_loss: 0.1819
Epoch 23/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 116ms/step - accuracy: 0.9313 - loss: 0.2364 - val_accuracy: 0.9537 - val_loss: 0.1755
Epoch 24/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 116ms/step - accuracy: 0.9338 - loss: 0.2276 - val_accuracy: 0.9562 - val_loss: 0.1694
Epoch 25/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9367 - loss: 0.2193 - val_accuracy: 0.9583 - val_loss: 0.1638
Epoch 26/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 116ms/step - accuracy: 0.9389 - loss: 0.2114 - val_accuracy: 0.9596 - val_loss: 0.1585
Epoch 27/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9413 - loss: 0.2038 - val_accuracy: 0.9613 - val_loss: 0.1533
Epoch 28/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 116ms/step - accuracy: 0.9432 - loss: 0.1967 - val_accuracy: 0.9619 - val_loss: 0.1487
Epoch 29/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 115ms/step - accuracy: 0.9449 - loss: 0.1900 - val_accuracy: 0.9643 - val_loss: 0.1443
Epoch 30/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.9467 - loss: 0.1837 - val_accuracy: 0.9649 - val_loss: 0.1402
Epoch 31/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 116ms/step - accuracy: 0.9486 - loss: 0.1777 - val_accuracy: 0.9649 - val_loss: 0.1364
Epoch 32/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9501 - loss: 0.1721 - val_accuracy: 0.9656 - val_loss: 0.1328
Epoch 33/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 116ms/step - accuracy: 0.9516 - loss: 0.1668 - val_accuracy: 0.9666 - val_loss: 0.1295
Epoch 34/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 116ms/step - accuracy: 0.9533 - loss: 0.1619 - val_accuracy: 0.9679 - val_loss: 0.1264
Epoch 35/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 116ms/step - accuracy: 0.9548 - loss: 0.1572 - val_accuracy: 0.9694 - val_loss: 0.1235
Epoch 36/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 125ms/step - accuracy: 0.9558 - loss: 0.1528 - val_accuracy: 0.9702 - val_loss: 0.1208
Epoch 37/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 121ms/step - accuracy: 0.9571 - loss: 0.1487 - val_accuracy: 0.9705 - val_loss: 0.1183
Epoch 38/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 125ms/step - accuracy: 0.9581 - loss: 0.1448 - val_accuracy: 0.9707 - val_loss: 0.1159
Epoch 39/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.9593 - loss: 0.1411 - val_accuracy: 0.9707 - val_loss: 0.1136
Epoch 40/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9603 - loss: 0.1376 - val_accuracy: 0.9715 - val_loss: 0.1116
Epoch 41/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 119ms/step - accuracy: 0.9610 - loss: 0.1344 - val_accuracy: 0.9715 - val_loss: 0.1096
Epoch 42/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9618 - loss: 0.1314 - val_accuracy: 0.9717 - val_loss: 0.1078
Epoch 43/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9629 - loss: 0.1284 - val_accuracy: 0.9719 - val_loss: 0.1061
Epoch 44/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 119ms/step - accuracy: 0.9636 - loss: 0.1257 - val_accuracy: 0.9726 - val_loss: 0.1045
Epoch 45/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9644 - loss: 0.1231 - val_accuracy: 0.9728 - val_loss: 0.1031
Epoch 46/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 119ms/step - accuracy: 0.9651 - loss: 0.1207 - val_accuracy: 0.9730 - val_loss: 0.1016
Epoch 47/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9657 - loss: 0.1183 - val_accuracy: 0.9730 - val_loss: 0.1003
Epoch 48/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.9663 - loss: 0.1161 - val_accuracy: 0.9736 - val_loss: 0.0990
Epoch 49/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 116ms/step - accuracy: 0.9668 - loss: 0.1139 - val_accuracy: 0.9743 - val_loss: 0.0978
Epoch 50/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9673 - loss: 0.1119 - val_accuracy: 0.9749 - val_loss: 0.0967
Epoch 51/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 119ms/step - accuracy: 0.9678 - loss: 0.1099 - val_accuracy: 0.9751 - val_loss: 0.0956
Epoch 52/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9684 - loss: 0.1080 - val_accuracy: 0.9753 - val_loss: 0.0945
Epoch 53/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 119ms/step - accuracy: 0.9688 - loss: 0.1062 - val_accuracy: 0.9758 - val_loss: 0.0935
Epoch 54/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9693 - loss: 0.1045 - val_accuracy: 0.9758 - val_loss: 0.0926
Epoch 55/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 119ms/step - accuracy: 0.9700 - loss: 0.1028 - val_accuracy: 0.9762 - val_loss: 0.0916
Epoch 56/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9702 - loss: 0.1012 - val_accuracy: 0.9766 - val_loss: 0.0908
Epoch 57/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9706 - loss: 0.0996 - val_accuracy: 0.9766 - val_loss: 0.0899
Epoch 58/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 122ms/step - accuracy: 0.9709 - loss: 0.0981 - val_accuracy: 0.9768 - val_loss: 0.0891
Epoch 59/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 128ms/step - accuracy: 0.9711 - loss: 0.0966 - val_accuracy: 0.9768 - val_loss: 0.0884
Epoch 60/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 124ms/step - accuracy: 0.9713 - loss: 0.0953 - val_accuracy: 0.9770 - val_loss: 0.0876
Epoch 61/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 119ms/step - accuracy: 0.9717 - loss: 0.0939 - val_accuracy: 0.9777 - val_loss: 0.0870
Epoch 62/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 121ms/step - accuracy: 0.9721 - loss: 0.0926 - val_accuracy: 0.9779 - val_loss: 0.0863
Epoch 63/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 119ms/step - accuracy: 0.9722 - loss: 0.0913 - val_accuracy: 0.9781 - val_loss: 0.0856
Epoch 64/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.9727 - loss: 0.0900 - val_accuracy: 0.9785 - val_loss: 0.0850
Epoch 65/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 121ms/step - accuracy: 0.9728 - loss: 0.0888 - val_accuracy: 0.9787 - val_loss: 0.0844
Epoch 66/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 123ms/step - accuracy: 0.9730 - loss: 0.0877 - val_accuracy: 0.9787 - val_loss: 0.0839
Epoch 67/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 121ms/step - accuracy: 0.9734 - loss: 0.0865 - val_accuracy: 0.9783 - val_loss: 0.0833
Epoch 68/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.9736 - loss: 0.0854 - val_accuracy: 0.9785 - val_loss: 0.0828
Epoch 69/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 119ms/step - accuracy: 0.9738 - loss: 0.0843 - val_accuracy: 0.9785 - val_loss: 0.0823
Epoch 70/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9740 - loss: 0.0833 - val_accuracy: 0.9787 - val_loss: 0.0817
Epoch 71/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9747 - loss: 0.0823 - val_accuracy: 0.9792 - val_loss: 0.0812
Epoch 72/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 119ms/step - accuracy: 0.9750 - loss: 0.0813 - val_accuracy: 0.9790 - val_loss: 0.0808
Epoch 73/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 116ms/step - accuracy: 0.9754 - loss: 0.0804 - val_accuracy: 0.9787 - val_loss: 0.0803
Epoch 74/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.9758 - loss: 0.0795 - val_accuracy: 0.9792 - val_loss: 0.0799
Epoch 75/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 116ms/step - accuracy: 0.9758 - loss: 0.0785 - val_accuracy: 0.9794 - val_loss: 0.0795
Epoch 76/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.9761 - loss: 0.0777 - val_accuracy: 0.9796 - val_loss: 0.0790
Epoch 77/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.9764 - loss: 0.0768 - val_accuracy: 0.9796 - val_loss: 0.0786
Epoch 78/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 10s 117ms/step - accuracy: 0.9767 - loss: 0.0760 - val_accuracy: 0.9794 - val_loss: 0.0782
Epoch 79/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9768 - loss: 0.0752 - val_accuracy: 0.9800 - val_loss: 0.0778
Epoch 80/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9771 - loss: 0.0744 - val_accuracy: 0.9800 - val_loss: 0.0774
Epoch 81/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 119ms/step - accuracy: 0.9773 - loss: 0.0736 - val_accuracy: 0.9800 - val_loss: 0.0771
Epoch 82/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.9777 - loss: 0.0728 - val_accuracy: 0.9800 - val_loss: 0.0767
Epoch 83/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 119ms/step - accuracy: 0.9779 - loss: 0.0721 - val_accuracy: 0.9800 - val_loss: 0.0764
Epoch 84/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9782 - loss: 0.0714 - val_accuracy: 0.9802 - val_loss: 0.0761
Epoch 85/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 120ms/step - accuracy: 0.9783 - loss: 0.0707 - val_accuracy: 0.9804 - val_loss: 0.0758
Epoch 86/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.9785 - loss: 0.0700 - val_accuracy: 0.9804 - val_loss: 0.0754
Epoch 87/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9789 - loss: 0.0693 - val_accuracy: 0.9804 - val_loss: 0.0751
Epoch 88/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 119ms/step - accuracy: 0.9791 - loss: 0.0686 - val_accuracy: 0.9807 - val_loss: 0.0748
Epoch 89/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.9792 - loss: 0.0680 - val_accuracy: 0.9811 - val_loss: 0.0745
Epoch 90/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 119ms/step - accuracy: 0.9794 - loss: 0.0674 - val_accuracy: 0.9811 - val_loss: 0.0743
Epoch 91/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.9797 - loss: 0.0667 - val_accuracy: 0.9811 - val_loss: 0.0740
Epoch 92/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 119ms/step - accuracy: 0.9801 - loss: 0.0661 - val_accuracy: 0.9811 - val_loss: 0.0737
Epoch 93/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.9802 - loss: 0.0655 - val_accuracy: 0.9811 - val_loss: 0.0735
Epoch 94/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9803 - loss: 0.0649 - val_accuracy: 0.9809 - val_loss: 0.0732
Epoch 95/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 120ms/step - accuracy: 0.9804 - loss: 0.0643 - val_accuracy: 0.9807 - val_loss: 0.0730
Epoch 96/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9805 - loss: 0.0638 - val_accuracy: 0.9813 - val_loss: 0.0728
Epoch 97/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9808 - loss: 0.0632 - val_accuracy: 0.9813 - val_loss: 0.0726
Epoch 98/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 117ms/step - accuracy: 0.9809 - loss: 0.0626 - val_accuracy: 0.9815 - val_loss: 0.0723
Epoch 99/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 119ms/step - accuracy: 0.9811 - loss: 0.0621 - val_accuracy: 0.9817 - val_loss: 0.0722
Epoch 100/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 6s 118ms/step - accuracy: 0.9813 - loss: 0.0616 - val_accuracy: 0.9817 - val_loss: 0.0719
5/5 ━━━━━━━━━━━━━━━━━━━━ 0s 30ms/step - accuracy: 0.9816 - loss: 0.0661
No description has been provided for this image
In [14]:
case_number = 7
filename = f"models/lecture10_case{case_number}.keras"
tf.keras.backend.clear_session()

 

inputs = keras.Input(shape=(28,28,1))
x = layers.Conv2D(filters=32, kernel_size=3, activation="relu",
                  kernel_regularizer = None,)(inputs)
x = layers.MaxPooling2D(pool_size=2)(x)
x = layers.Dropout(0.25)(x)
x = layers.Conv2D(filters=64, kernel_size=3, activation="relu",
                  kernel_regularizer = None,
                  )(x)
x = layers.MaxPooling2D(pool_size=2)(x)
x = layers.Dropout(0.25)(x)
x = layers.Flatten()(x)
x = layers.Dense(512, activation  = "relu")(x)
x = layers.Dense(128,activation="relu")(x)

outputs = layers.Dense(10, activation="softmax")(x)
model = keras.Model(inputs=inputs, outputs=outputs)

model.summary()

#recompile model with rmsprop optimizer

adam = optimizers.Adam(
    learning_rate = 0.001,
    beta_1 = 0.9,
    beta_2 = 0.999,
    epsilon = 1e-7,
    amsgrad = False,
    weight_decay = None,
    ema_momentum = 0.99
)

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

#create a callback to save the best model with respect to validatioh loss

callbacks = [
    keras.callbacks.ModelCheckpoint(
        filepath = filename,
        save_best_only = True,
        monitor = "val_loss")]

#train model with ptraining data, and use val_ds for validation 
number_epochs = 100

history = model.fit(ptrain_ds, epochs = number_epochs,
                    validation_data = val_ds,
                    callbacks = callbacks)

#evaluate 
fit_evaluation(history,filename,val_ds)
Model: "functional"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type)                    ┃ Output Shape           ┃       Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ input_layer (InputLayer)        │ (None, 28, 28, 1)      │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d (Conv2D)                 │ (None, 26, 26, 32)     │           320 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d (MaxPooling2D)    │ (None, 13, 13, 32)     │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout (Dropout)               │ (None, 13, 13, 32)     │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_1 (Conv2D)               │ (None, 11, 11, 64)     │        18,496 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_1 (MaxPooling2D)  │ (None, 5, 5, 64)       │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_1 (Dropout)             │ (None, 5, 5, 64)       │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten (Flatten)               │ (None, 1600)           │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense (Dense)                   │ (None, 512)            │       819,712 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_1 (Dense)                 │ (None, 128)            │        65,664 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_2 (Dense)                 │ (None, 10)             │         1,290 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
 Total params: 905,482 (3.45 MB)
 Trainable params: 905,482 (3.45 MB)
 Non-trainable params: 0 (0.00 B)
Epoch 1/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 9s 148ms/step - accuracy: 0.1640 - loss: 2.2502 - val_accuracy: 0.6120 - val_loss: 1.3930
Epoch 2/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 144ms/step - accuracy: 0.6506 - loss: 1.1066 - val_accuracy: 0.8361 - val_loss: 0.5391
Epoch 3/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 141ms/step - accuracy: 0.7996 - loss: 0.6171 - val_accuracy: 0.8912 - val_loss: 0.3684
Epoch 4/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 141ms/step - accuracy: 0.8489 - loss: 0.4823 - val_accuracy: 0.9177 - val_loss: 0.2866
Epoch 5/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 141ms/step - accuracy: 0.8781 - loss: 0.3952 - val_accuracy: 0.9341 - val_loss: 0.2314
Epoch 6/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 142ms/step - accuracy: 0.8991 - loss: 0.3281 - val_accuracy: 0.9490 - val_loss: 0.1877
Epoch 7/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 139ms/step - accuracy: 0.9161 - loss: 0.2774 - val_accuracy: 0.9581 - val_loss: 0.1582
Epoch 8/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 143ms/step - accuracy: 0.9279 - loss: 0.2331 - val_accuracy: 0.9660 - val_loss: 0.1361
Epoch 9/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 141ms/step - accuracy: 0.9376 - loss: 0.2021 - val_accuracy: 0.9692 - val_loss: 0.1204
Epoch 10/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 144ms/step - accuracy: 0.9444 - loss: 0.1799 - val_accuracy: 0.9728 - val_loss: 0.1066
Epoch 11/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 142ms/step - accuracy: 0.9492 - loss: 0.1640 - val_accuracy: 0.9734 - val_loss: 0.0995
Epoch 12/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 142ms/step - accuracy: 0.9532 - loss: 0.1492 - val_accuracy: 0.9743 - val_loss: 0.0935
Epoch 13/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 142ms/step - accuracy: 0.9581 - loss: 0.1371 - val_accuracy: 0.9777 - val_loss: 0.0863
Epoch 14/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 143ms/step - accuracy: 0.9592 - loss: 0.1327 - val_accuracy: 0.9773 - val_loss: 0.0818
Epoch 15/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 142ms/step - accuracy: 0.9618 - loss: 0.1231 - val_accuracy: 0.9785 - val_loss: 0.0783
Epoch 16/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 143ms/step - accuracy: 0.9633 - loss: 0.1178 - val_accuracy: 0.9794 - val_loss: 0.0741
Epoch 17/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 142ms/step - accuracy: 0.9658 - loss: 0.1096 - val_accuracy: 0.9798 - val_loss: 0.0719
Epoch 18/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 142ms/step - accuracy: 0.9671 - loss: 0.1046 - val_accuracy: 0.9815 - val_loss: 0.0680
Epoch 19/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 143ms/step - accuracy: 0.9694 - loss: 0.0989 - val_accuracy: 0.9813 - val_loss: 0.0675
Epoch 20/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 142ms/step - accuracy: 0.9713 - loss: 0.0939 - val_accuracy: 0.9834 - val_loss: 0.0643
Epoch 21/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 143ms/step - accuracy: 0.9708 - loss: 0.0933 - val_accuracy: 0.9826 - val_loss: 0.0638
Epoch 22/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 141ms/step - accuracy: 0.9724 - loss: 0.0883 - val_accuracy: 0.9832 - val_loss: 0.0612
Epoch 23/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 141ms/step - accuracy: 0.9732 - loss: 0.0833 - val_accuracy: 0.9830 - val_loss: 0.0599
Epoch 24/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 142ms/step - accuracy: 0.9746 - loss: 0.0820 - val_accuracy: 0.9838 - val_loss: 0.0591
Epoch 25/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 142ms/step - accuracy: 0.9752 - loss: 0.0776 - val_accuracy: 0.9845 - val_loss: 0.0574
Epoch 26/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 142ms/step - accuracy: 0.9777 - loss: 0.0717 - val_accuracy: 0.9860 - val_loss: 0.0556
Epoch 27/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 144ms/step - accuracy: 0.9773 - loss: 0.0729 - val_accuracy: 0.9864 - val_loss: 0.0552
Epoch 28/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 142ms/step - accuracy: 0.9771 - loss: 0.0725 - val_accuracy: 0.9851 - val_loss: 0.0551
Epoch 29/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 145ms/step - accuracy: 0.9787 - loss: 0.0677 - val_accuracy: 0.9858 - val_loss: 0.0535
Epoch 30/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 141ms/step - accuracy: 0.9791 - loss: 0.0657 - val_accuracy: 0.9858 - val_loss: 0.0542
Epoch 31/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 144ms/step - accuracy: 0.9800 - loss: 0.0636 - val_accuracy: 0.9860 - val_loss: 0.0522
Epoch 32/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 143ms/step - accuracy: 0.9805 - loss: 0.0609 - val_accuracy: 0.9855 - val_loss: 0.0533
Epoch 33/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 141ms/step - accuracy: 0.9811 - loss: 0.0598 - val_accuracy: 0.9864 - val_loss: 0.0518
Epoch 34/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 142ms/step - accuracy: 0.9817 - loss: 0.0568 - val_accuracy: 0.9853 - val_loss: 0.0533
Epoch 35/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 142ms/step - accuracy: 0.9820 - loss: 0.0559 - val_accuracy: 0.9849 - val_loss: 0.0530
Epoch 36/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 139ms/step - accuracy: 0.9829 - loss: 0.0538 - val_accuracy: 0.9866 - val_loss: 0.0507
Epoch 37/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 144ms/step - accuracy: 0.9833 - loss: 0.0527 - val_accuracy: 0.9855 - val_loss: 0.0517
Epoch 38/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 140ms/step - accuracy: 0.9823 - loss: 0.0537 - val_accuracy: 0.9868 - val_loss: 0.0502
Epoch 39/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 143ms/step - accuracy: 0.9834 - loss: 0.0504 - val_accuracy: 0.9858 - val_loss: 0.0497
Epoch 40/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 143ms/step - accuracy: 0.9840 - loss: 0.0502 - val_accuracy: 0.9870 - val_loss: 0.0460
Epoch 41/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 144ms/step - accuracy: 0.9845 - loss: 0.0474 - val_accuracy: 0.9872 - val_loss: 0.0491
Epoch 42/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 141ms/step - accuracy: 0.9849 - loss: 0.0482 - val_accuracy: 0.9875 - val_loss: 0.0465
Epoch 43/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 141ms/step - accuracy: 0.9852 - loss: 0.0447 - val_accuracy: 0.9870 - val_loss: 0.0476
Epoch 44/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 139ms/step - accuracy: 0.9856 - loss: 0.0453 - val_accuracy: 0.9889 - val_loss: 0.0460
Epoch 45/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 142ms/step - accuracy: 0.9867 - loss: 0.0423 - val_accuracy: 0.9885 - val_loss: 0.0470
Epoch 46/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 140ms/step - accuracy: 0.9858 - loss: 0.0428 - val_accuracy: 0.9883 - val_loss: 0.0457
Epoch 47/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 146ms/step - accuracy: 0.9870 - loss: 0.0403 - val_accuracy: 0.9889 - val_loss: 0.0454
Epoch 48/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 145ms/step - accuracy: 0.9869 - loss: 0.0396 - val_accuracy: 0.9887 - val_loss: 0.0440
Epoch 49/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 145ms/step - accuracy: 0.9879 - loss: 0.0388 - val_accuracy: 0.9894 - val_loss: 0.0457
Epoch 50/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 139ms/step - accuracy: 0.9881 - loss: 0.0378 - val_accuracy: 0.9881 - val_loss: 0.0479
Epoch 51/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 143ms/step - accuracy: 0.9886 - loss: 0.0354 - val_accuracy: 0.9879 - val_loss: 0.0470
Epoch 52/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 141ms/step - accuracy: 0.9881 - loss: 0.0371 - val_accuracy: 0.9898 - val_loss: 0.0435
Epoch 53/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 143ms/step - accuracy: 0.9886 - loss: 0.0343 - val_accuracy: 0.9894 - val_loss: 0.0442
Epoch 54/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 141ms/step - accuracy: 0.9888 - loss: 0.0344 - val_accuracy: 0.9896 - val_loss: 0.0442
Epoch 55/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 141ms/step - accuracy: 0.9898 - loss: 0.0319 - val_accuracy: 0.9892 - val_loss: 0.0450
Epoch 56/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 140ms/step - accuracy: 0.9904 - loss: 0.0305 - val_accuracy: 0.9898 - val_loss: 0.0433
Epoch 57/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 144ms/step - accuracy: 0.9902 - loss: 0.0305 - val_accuracy: 0.9894 - val_loss: 0.0448
Epoch 58/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 141ms/step - accuracy: 0.9905 - loss: 0.0296 - val_accuracy: 0.9889 - val_loss: 0.0449
Epoch 59/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 145ms/step - accuracy: 0.9897 - loss: 0.0314 - val_accuracy: 0.9902 - val_loss: 0.0424
Epoch 60/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 156ms/step - accuracy: 0.9911 - loss: 0.0286 - val_accuracy: 0.9889 - val_loss: 0.0461
Epoch 61/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 154ms/step - accuracy: 0.9903 - loss: 0.0298 - val_accuracy: 0.9900 - val_loss: 0.0408
Epoch 62/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 149ms/step - accuracy: 0.9907 - loss: 0.0286 - val_accuracy: 0.9875 - val_loss: 0.0468
Epoch 63/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 145ms/step - accuracy: 0.9905 - loss: 0.0288 - val_accuracy: 0.9902 - val_loss: 0.0436
Epoch 64/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 140ms/step - accuracy: 0.9913 - loss: 0.0270 - val_accuracy: 0.9892 - val_loss: 0.0466
Epoch 65/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 137ms/step - accuracy: 0.9914 - loss: 0.0256 - val_accuracy: 0.9892 - val_loss: 0.0439
Epoch 66/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 138ms/step - accuracy: 0.9913 - loss: 0.0254 - val_accuracy: 0.9881 - val_loss: 0.0495
Epoch 67/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 136ms/step - accuracy: 0.9917 - loss: 0.0248 - val_accuracy: 0.9885 - val_loss: 0.0440
Epoch 68/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 137ms/step - accuracy: 0.9913 - loss: 0.0256 - val_accuracy: 0.9896 - val_loss: 0.0435
Epoch 69/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 136ms/step - accuracy: 0.9921 - loss: 0.0237 - val_accuracy: 0.9898 - val_loss: 0.0445
Epoch 70/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 139ms/step - accuracy: 0.9927 - loss: 0.0215 - val_accuracy: 0.9887 - val_loss: 0.0459
Epoch 71/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 136ms/step - accuracy: 0.9918 - loss: 0.0237 - val_accuracy: 0.9892 - val_loss: 0.0433
Epoch 72/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 137ms/step - accuracy: 0.9932 - loss: 0.0204 - val_accuracy: 0.9877 - val_loss: 0.0463
Epoch 73/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 135ms/step - accuracy: 0.9929 - loss: 0.0213 - val_accuracy: 0.9889 - val_loss: 0.0443
Epoch 74/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 136ms/step - accuracy: 0.9931 - loss: 0.0208 - val_accuracy: 0.9896 - val_loss: 0.0424
Epoch 75/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 135ms/step - accuracy: 0.9937 - loss: 0.0201 - val_accuracy: 0.9902 - val_loss: 0.0431
Epoch 76/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 136ms/step - accuracy: 0.9940 - loss: 0.0182 - val_accuracy: 0.9904 - val_loss: 0.0422
Epoch 77/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 137ms/step - accuracy: 0.9946 - loss: 0.0177 - val_accuracy: 0.9900 - val_loss: 0.0425
Epoch 78/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 138ms/step - accuracy: 0.9930 - loss: 0.0198 - val_accuracy: 0.9902 - val_loss: 0.0424
Epoch 79/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 137ms/step - accuracy: 0.9942 - loss: 0.0173 - val_accuracy: 0.9902 - val_loss: 0.0417
Epoch 80/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 136ms/step - accuracy: 0.9946 - loss: 0.0161 - val_accuracy: 0.9900 - val_loss: 0.0411
Epoch 81/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 137ms/step - accuracy: 0.9939 - loss: 0.0178 - val_accuracy: 0.9913 - val_loss: 0.0416
Epoch 82/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 138ms/step - accuracy: 0.9946 - loss: 0.0162 - val_accuracy: 0.9898 - val_loss: 0.0437
Epoch 83/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 136ms/step - accuracy: 0.9944 - loss: 0.0161 - val_accuracy: 0.9898 - val_loss: 0.0433
Epoch 84/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 140ms/step - accuracy: 0.9942 - loss: 0.0176 - val_accuracy: 0.9894 - val_loss: 0.0435
Epoch 85/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 140ms/step - accuracy: 0.9947 - loss: 0.0173 - val_accuracy: 0.9889 - val_loss: 0.0480
Epoch 86/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 139ms/step - accuracy: 0.9955 - loss: 0.0146 - val_accuracy: 0.9892 - val_loss: 0.0433
Epoch 87/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 137ms/step - accuracy: 0.9949 - loss: 0.0147 - val_accuracy: 0.9911 - val_loss: 0.0406
Epoch 88/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 141ms/step - accuracy: 0.9955 - loss: 0.0127 - val_accuracy: 0.9898 - val_loss: 0.0485
Epoch 89/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 136ms/step - accuracy: 0.9945 - loss: 0.0154 - val_accuracy: 0.9898 - val_loss: 0.0414
Epoch 90/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 137ms/step - accuracy: 0.9951 - loss: 0.0144 - val_accuracy: 0.9909 - val_loss: 0.0388
Epoch 91/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 138ms/step - accuracy: 0.9950 - loss: 0.0133 - val_accuracy: 0.9923 - val_loss: 0.0402
Epoch 92/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 137ms/step - accuracy: 0.9947 - loss: 0.0159 - val_accuracy: 0.9900 - val_loss: 0.0423
Epoch 93/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 136ms/step - accuracy: 0.9947 - loss: 0.0146 - val_accuracy: 0.9900 - val_loss: 0.0402
Epoch 94/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 136ms/step - accuracy: 0.9956 - loss: 0.0134 - val_accuracy: 0.9913 - val_loss: 0.0396
Epoch 95/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 136ms/step - accuracy: 0.9957 - loss: 0.0136 - val_accuracy: 0.9902 - val_loss: 0.0454
Epoch 96/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 136ms/step - accuracy: 0.9958 - loss: 0.0125 - val_accuracy: 0.9923 - val_loss: 0.0425
Epoch 97/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 7s 137ms/step - accuracy: 0.9949 - loss: 0.0139 - val_accuracy: 0.9906 - val_loss: 0.0420
Epoch 98/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 146ms/step - accuracy: 0.9961 - loss: 0.0110 - val_accuracy: 0.9917 - val_loss: 0.0407
Epoch 99/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 154ms/step - accuracy: 0.9955 - loss: 0.0121 - val_accuracy: 0.9900 - val_loss: 0.0462
Epoch 100/100
54/54 ━━━━━━━━━━━━━━━━━━━━ 8s 151ms/step - accuracy: 0.9958 - loss: 0.0115 - val_accuracy: 0.9906 - val_loss: 0.0417
5/5 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - accuracy: 0.9913 - loss: 0.0324
No description has been provided for this image
In [10]:
for case_number in range(1,8):
    filename = f"models/lecture10_case{case_number}.keras"
    case_model = keras.models.load_model(filename)
    if case_number==1:
        test_ds = test_1d_32_ds
    if (case_number>=2) and (case_number <= 5):
        test_ds = test_1d_1024_ds
    if case_number >= 6:
        test_ds = test_2d_1024_ds

    test_loss, test_acc = case_model.evaluate(test_ds)
    print(f"CASE {case_number}: TEST LOSS = {test_loss*100:.2f}% \tTEST ACC = {test_acc*100:.2f}%")
313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 1ms/step - accuracy: 0.9547 - loss: 0.1681
CASE 1: TEST LOSS = 15.60% 	TEST ACC = 95.93%
10/10 ━━━━━━━━━━━━━━━━━━━━ 0s 8ms/step - accuracy: 0.9720 - loss: 0.0930
CASE 2: TEST LOSS = 7.85% 	TEST ACC = 97.56%
10/10 ━━━━━━━━━━━━━━━━━━━━ 0s 8ms/step - accuracy: 0.9629 - loss: 0.2319
CASE 3: TEST LOSS = 21.24% 	TEST ACC = 96.90%
10/10 ━━━━━━━━━━━━━━━━━━━━ 0s 7ms/step - accuracy: 0.9711 - loss: 0.1653
CASE 4: TEST LOSS = 15.03% 	TEST ACC = 97.54%
10/10 ━━━━━━━━━━━━━━━━━━━━ 0s 7ms/step - accuracy: 0.9762 - loss: 0.1509
CASE 5: TEST LOSS = 13.74% 	TEST ACC = 98.07%
10/10 ━━━━━━━━━━━━━━━━━━━━ 0s 33ms/step - accuracy: 0.9768 - loss: 0.0738
CASE 6: TEST LOSS = 6.29% 	TEST ACC = 98.06%
10/10 ━━━━━━━━━━━━━━━━━━━━ 0s 37ms/step - accuracy: 0.9887 - loss: 0.0400
CASE 7: TEST LOSS = 3.15% 	TEST ACC = 99.08%