{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "code", "source": [ "#KerasTuner requires Python 3.6+ and TensorFlow 2.0+.\n", "!pip install keras-tuner --upgrade" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "TBx1VSxJm2ye", "outputId": "69e625fd-4b32-4110-b417-0575739ef29d" }, "execution_count": 2, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Requirement already satisfied: keras-tuner in /usr/local/lib/python3.10/dist-packages (1.4.6)\n", "Requirement already satisfied: keras in /usr/local/lib/python3.10/dist-packages (from keras-tuner) (2.14.0)\n", "Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from keras-tuner) (23.2)\n", "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from keras-tuner) (2.31.0)\n", "Requirement already satisfied: kt-legacy in /usr/local/lib/python3.10/dist-packages (from keras-tuner) (1.0.5)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->keras-tuner) (3.3.2)\n", "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->keras-tuner) (3.4)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->keras-tuner) (2.0.7)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->keras-tuner) (2023.7.22)\n" ] } ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "id": "5zM9asDgk31v" }, "outputs": [], "source": [ "from tensorflow import keras\n", "import keras_tuner\n", "import numpy as np" ] }, { "cell_type": "code", "source": [ "(x, y), (x_test, y_test) = keras.datasets.mnist.load_data()\n", "\n", "x_train = x[:-10000]\n", "x_val = x[-10000:]\n", "y_train = y[:-10000]\n", "y_val = y[-10000:]\n", "\n", "x_train = np.expand_dims(x_train, -1).astype(\"float32\") / 255.0\n", "x_val = np.expand_dims(x_val, -1).astype(\"float32\") / 255.0\n", "x_test = np.expand_dims(x_test, -1).astype(\"float32\") / 255.0" ], "metadata": { "id": "ZL3KvTdNoEDs" }, "execution_count": 4, "outputs": [] }, { "cell_type": "markdown", "source": [ "## Define the search space\n", "`hp.Int('units', min_value=32, max_value=512, step=32)`, whose range is from 32 to 512 inclusive.\n", "\n", "When sampling from it, the minimum step for walking through the interval is 32." ], "metadata": { "id": "cB4qNpZatKNR" } }, { "cell_type": "code", "source": [ "def build_model(hp):\n", " model = keras.Sequential()\n", " model.add(keras.layers.Flatten())\n", " model.add(\n", " keras.layers.Dense(\n", " # Define the hyperparameter.\n", " units=hp.Int(\"units\", min_value=32, max_value=512, step=32),\n", " activation=hp.Choice(\"activation\", [\"relu\", \"LeakyReLU\"]),\n", " )\n", " )\n", " model.add(keras.layers.Dense(10, activation=\"softmax\"))\n", "\n", " model.compile(optimizer=\"adam\", loss=\"SparseCategoricalCrossentropy\", metrics=[\"accuracy\"])\n", " return model" ], "metadata": { "id": "Bwa1X-TXoiPN" }, "execution_count": 6, "outputs": [] }, { "cell_type": "code", "source": [ "tuner = keras_tuner.RandomSearch(\n", " build_model,\n", " objective='val_accuracy',\n", " max_trials=5)" ], "metadata": { "id": "rOiDnQlbpd6H" }, "execution_count": 7, "outputs": [] }, { "cell_type": "code", "source": [ "tuner.search_space_summary()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "-U_11fk91j7_", "outputId": "43a4f178-b8c4-4033-bbde-813cfd9908a2" }, "execution_count": 9, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Search space summary\n", "Default search space size: 2\n", "units (Int)\n", "{'default': None, 'conditions': [], 'min_value': 32, 'max_value': 512, 'step': 32, 'sampling': 'linear'}\n", "activation (Choice)\n", "{'default': 'relu', 'conditions': [], 'values': ['relu', 'LeakyReLU'], 'ordered': False}\n" ] } ] }, { "cell_type": "code", "source": [ "tuner.search(x_train, y_train, epochs=3, validation_data=(x_val, y_val))" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "1tqCHT4RnqBk", "outputId": "f335f46e-6464-4092-84fb-ec1d0f8acd70" }, "execution_count": 8, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Trial 5 Complete [00h 00m 42s]\n", "val_accuracy: 0.9736999869346619\n", "\n", "Best val_accuracy So Far: 0.9736999869346619\n", "Total elapsed time: 00h 02m 37s\n" ] } ] }, { "cell_type": "code", "source": [ "best_model = tuner.get_best_models()[0]" ], "metadata": { "id": "QbNvjxh4qsXG" }, "execution_count": 10, "outputs": [] }, { "cell_type": "code", "source": [ "tuner.results_summary()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "l3_5cJlWqsui", "outputId": "7ae18381-5527-4599-d757-5d575da047f2" }, "execution_count": 11, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Results summary\n", "Results in ./untitled_project\n", "Showing 10 best trials\n", "Objective(name=\"val_accuracy\", direction=\"max\")\n", "\n", "Trial 4 summary\n", "Hyperparameters:\n", "units: 224\n", "activation: relu\n", "Score: 0.9736999869346619\n", "\n", "Trial 0 summary\n", "Hyperparameters:\n", "units: 288\n", "activation: LeakyReLU\n", "Score: 0.9679999947547913\n", "\n", "Trial 3 summary\n", "Hyperparameters:\n", "units: 448\n", "activation: LeakyReLU\n", "Score: 0.9668999910354614\n", "\n", "Trial 1 summary\n", "Hyperparameters:\n", "units: 352\n", "activation: LeakyReLU\n", "Score: 0.9656000137329102\n", "\n", "Trial 2 summary\n", "Hyperparameters:\n", "units: 32\n", "activation: LeakyReLU\n", "Score: 0.9531000256538391\n" ] } ] }, { "cell_type": "code", "source": [ "best_model.evaluate(x_test, y_test)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "l1vjSJ73rPVh", "outputId": "d1f5cac2-9e3f-4550-e2ad-6df5509c7e99" }, "execution_count": 12, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "313/313 [==============================] - 1s 2ms/step - loss: 0.0893 - accuracy: 0.9718\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "[0.08932860195636749, 0.9718000292778015]" ] }, "metadata": {}, "execution_count": 12 } ] } ] }