#KerasTuner requires Python 3.6+ and TensorFlow 2.0+.
!pip install keras-tuner --upgrade
Requirement already satisfied: keras-tuner in /usr/local/lib/python3.10/dist-packages (1.4.6) Requirement already satisfied: keras in /usr/local/lib/python3.10/dist-packages (from keras-tuner) (2.14.0) Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from keras-tuner) (23.2) Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from keras-tuner) (2.31.0) Requirement already satisfied: kt-legacy in /usr/local/lib/python3.10/dist-packages (from keras-tuner) (1.0.5) Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->keras-tuner) (3.3.2) Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->keras-tuner) (3.4) Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->keras-tuner) (2.0.7) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->keras-tuner) (2023.7.22)
from tensorflow import keras
import keras_tuner
import numpy as np
(x, y), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train = x[:-10000]
x_val = x[-10000:]
y_train = y[:-10000]
y_val = y[-10000:]
x_train = np.expand_dims(x_train, -1).astype("float32") / 255.0
x_val = np.expand_dims(x_val, -1).astype("float32") / 255.0
x_test = np.expand_dims(x_test, -1).astype("float32") / 255.0
def build_model(hp):
model = keras.Sequential()
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(hp.Choice('units', [32, 128, 256]), activation="relu"))
model.add(keras.layers.Dense(10, activation="softmax"))
model.compile(optimizer="adam", loss="SparseCategoricalCrossentropy", metrics=["accuracy"])
return model
tuner = keras_tuner.RandomSearch(
build_model,
objective='val_accuracy',
max_trials=5)
tuner.search(x_train, y_train, epochs=3, validation_data=(x_val, y_val))
Trial 3 Complete [00h 00m 15s] val_accuracy: 0.9564999938011169 Best val_accuracy So Far: 0.9732999801635742 Total elapsed time: 00h 01m 09s
tuner.get_best_models()
[<keras.src.engine.sequential.Sequential at 0x7f2c656aeb90>]
best_model = tuner.get_best_models()[0]
tuner.results_summary()
Results summary Results in ./untitled_project Showing 10 best trials Objective(name="val_accuracy", direction="max") Trial 1 summary Hyperparameters: units: 256 Score: 0.9732999801635742 Trial 0 summary Hyperparameters: units: 128 Score: 0.9702000021934509 Trial 2 summary Hyperparameters: units: 32 Score: 0.9564999938011169
best_model.evaluate(x_test, y_test)
313/313 [==============================] - 1s 3ms/step - loss: 0.0868 - accuracy: 0.9737
[0.08677380532026291, 0.9736999869346619]