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
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
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
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
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
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
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
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%