{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.10","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-05-20T16:46:23.092426Z","iopub.execute_input":"2023-05-20T16:46:23.093038Z","iopub.status.idle":"2023-05-20T16:46:23.102202Z","shell.execute_reply.started":"2023-05-20T16:46:23.092999Z","shell.execute_reply":"2023-05-20T16:46:23.101301Z"},"trusted":true},"execution_count":2,"outputs":[{"name":"stdout","text":"/kaggle/input/digit-recognizer/sample_submission.csv\n/kaggle/input/digit-recognizer/train.csv\n/kaggle/input/digit-recognizer/test.csv\n","output_type":"stream"}]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n\nfrom keras.preprocessing.image import ImageDataGenerator\n\nimport tensorflow as tf\nimport keras\nfrom tensorflow.keras import datasets, layers, models \nfrom keras_tuner import Hyperband\nfrom kerastuner.engine.hyperparameters import HyperParameters\nfrom sklearn.model_selection import train_test_split\n","metadata":{"execution":{"iopub.status.busy":"2023-05-20T16:49:02.416754Z","iopub.execute_input":"2023-05-20T16:49:02.417139Z","iopub.status.idle":"2023-05-20T16:49:02.425018Z","shell.execute_reply.started":"2023-05-20T16:49:02.417105Z","shell.execute_reply":"2023-05-20T16:49:02.424025Z"},"trusted":true},"execution_count":11,"outputs":[]},{"cell_type":"code","source":"raw_dataset = pd.read_csv(\"/kaggle/input/digit-recognizer/train.csv\")\nraw_dataset_images = raw_dataset.iloc[:, 1:]\nraw_dataset_label = raw_dataset.iloc[:, 0]\n\n\ntraining_data_images, testing_data_images, training_data_label, testing_data_label = train_test_split(\n    raw_dataset_images, raw_dataset_label, test_size=0.2, random_state=0)\n\ntraining_data_label = training_data_label.astype(int)\ntesting_data_label = testing_data_label.astype(int)","metadata":{"execution":{"iopub.status.busy":"2023-05-20T16:49:02.565479Z","iopub.execute_input":"2023-05-20T16:49:02.565781Z","iopub.status.idle":"2023-05-20T16:49:06.571686Z","shell.execute_reply.started":"2023-05-20T16:49:02.565755Z","shell.execute_reply":"2023-05-20T16:49:06.57072Z"},"trusted":true},"execution_count":12,"outputs":[]},{"cell_type":"code","source":"reshaped_train_df = training_data_images.values.reshape(-1, 28, 28, 1)\nreshaped_test_df = testing_data_images.values.reshape(-1, 28, 28, 1)","metadata":{"execution":{"iopub.status.busy":"2023-05-20T16:49:06.573595Z","iopub.execute_input":"2023-05-20T16:49:06.573936Z","iopub.status.idle":"2023-05-20T16:49:06.579687Z","shell.execute_reply.started":"2023-05-20T16:49:06.573904Z","shell.execute_reply":"2023-05-20T16:49:06.578536Z"},"trusted":true},"execution_count":13,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"datagen = ImageDataGenerator(\n    rotation_range = 30,\n    zoom_range=0.20,\n    width_shift_range=False,\n    height_shift_range=False\n)\ndatagen.fit(X_train)","metadata":{"execution":{"iopub.status.busy":"2023-05-20T16:49:06.581517Z","iopub.execute_input":"2023-05-20T16:49:06.581856Z","iopub.status.idle":"2023-05-20T16:49:06.613257Z","shell.execute_reply.started":"2023-05-20T16:49:06.581823Z","shell.execute_reply":"2023-05-20T16:49:06.610867Z"},"trusted":true},"execution_count":14,"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)","Cell \u001b[0;32mIn[14], line 7\u001b[0m\n\u001b[1;32m      1\u001b[0m datagen \u001b[38;5;241m=\u001b[39m ImageDataGenerator(\n\u001b[1;32m      2\u001b[0m     rotation_range \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m30\u001b[39m,\n\u001b[1;32m      3\u001b[0m     zoom_range\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0.20\u001b[39m,\n\u001b[1;32m      4\u001b[0m     width_shift_range\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[1;32m      5\u001b[0m     height_shift_range\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[1;32m      6\u001b[0m )\n\u001b[0;32m----> 7\u001b[0m datagen\u001b[38;5;241m.\u001b[39mfit(\u001b[43mX_train\u001b[49m)\n","\u001b[0;31mNameError\u001b[0m: name 'X_train' is not defined"],"ename":"NameError","evalue":"name 'X_train' is not defined","output_type":"error"}]},{"cell_type":"code","source":"y_train = keras.utils.to_categorical(y_train)\n\n\n","metadata":{"execution":{"iopub.status.busy":"2023-05-20T16:49:06.614544Z","iopub.status.idle":"2023-05-20T16:49:06.615604Z","shell.execute_reply.started":"2023-05-20T16:49:06.615353Z","shell.execute_reply":"2023-05-20T16:49:06.615378Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.models import Sequential\nfrom tensorflow.keras import layers\nfrom tensorflow.keras.layers.experimental import preprocessing\n","metadata":{"execution":{"iopub.status.busy":"2023-05-20T16:49:06.617007Z","iopub.status.idle":"2023-05-20T16:49:06.617778Z","shell.execute_reply.started":"2023-05-20T16:49:06.617526Z","shell.execute_reply":"2023-05-20T16:49:06.617549Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def model_building(hp_optimizer):\n    model = keras.Sequential()\n    model.add(keras.layers.Conv2D(hp_optimizer.Choice('filters_1', values=[8, 16, 24, 32, 40, 48, 56, 64]), 3, activation=\"relu\", input_shape=(28, 28, 1), padding=\"same\", kernel_regularizer=keras.regularizers.L2(0.0005)))\n    model.add(keras.layers.Conv2D(hp_optimizer.Choice('filters_2', values=[16, 32, 48, 64, 80, 96, 112, 128]), 3, activation=\"relu\", padding=\"same\", kernel_regularizer=keras.regularizers.L2(0.0005)))\n    model.add(keras.layers.MaxPooling2D(pool_size=(2, 2)))\n    model.add(keras.layers.Conv2D(hp_optimizer.Choice('filters_3', values=[32, 64, 96, 128, 160, 192, 224, 256]), 3, activation=\"relu\", padding=\"same\", kernel_regularizer=keras.regularizers.L2(0.0005)))\n    model.add(keras.layers.Conv2D(hp_optimizer.Choice('filters_4', values=[64, 128, 192, 256, 320, 384, 448, 512]), 3, activation=\"relu\", padding=\"same\", kernel_regularizer=keras.regularizers.L2(0.0005)))\n    model.add(keras.layers.MaxPooling2D(pool_size=(2, 2)))\n    model.add(keras.layers.Flatten())\n    model.add(layers.Dense(hp_optimizer.Int('units_1', min_value=32, max_value=512, step=32), activation='relu'))\n    model.add(layers.Dense(hp_optimizer.Int('units_2', min_value=32, max_value=512, step=32), activation='relu'))\n    model.add(layers.Dense(10, activation='softmax'))\n    model.compile(optimizer=keras.optimizers.Adam(hp_optimizer.Float('learning_rate', min_value=1e-4, max_value=1e-2, sampling='log')), loss='sparse_categorical_crossentropy', metrics=['accuracy'])\n    return model\n        \n        \n    \n","metadata":{"execution":{"iopub.status.busy":"2023-05-20T16:49:06.619165Z","iopub.status.idle":"2023-05-20T16:49:06.619915Z","shell.execute_reply.started":"2023-05-20T16:49:06.619662Z","shell.execute_reply":"2023-05-20T16:49:06.619685Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nearly_stopping = keras.callbacks.EarlyStopping(monitor=\"val_loss\",patience=5,restore_best_weights=True)\n\nhyperparameters = HyperParameters()\n\ntuner = Hyperband(\n    model_building,\n    objective='val_accuracy',\n    max_epochs=20,\n    factor=3,\n    seed=123,\n    hyperparameters=hyperparameters,\n    directory='/kaggle/working/',\n    project_name='MNIST_comp'\n)\n\ntuner.search(reshaped_train_df, training_data_label, validation_data=(reshaped_test_df, testing_data_label), epochs=20,callbacks=[early_stopping])\n\nbest_model = tuner.get_best_models(num_models=1)[0]\nbest_hyperparameters = tuner.get_best_hyperparameters(num_trials=1)[0]","metadata":{"execution":{"iopub.status.busy":"2023-05-20T16:49:06.621327Z","iopub.status.idle":"2023-05-20T16:49:06.62212Z","shell.execute_reply.started":"2023-05-20T16:49:06.621846Z","shell.execute_reply":"2023-05-20T16:49:06.62187Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n","metadata":{"execution":{"iopub.status.busy":"2023-05-20T14:31:17.765457Z","iopub.status.idle":"2023-05-20T14:31:17.766228Z","shell.execute_reply.started":"2023-05-20T14:31:17.765979Z","shell.execute_reply":"2023-05-20T14:31:17.766003Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"loss_df = pd.DataFrame(hist.history)\nloss_df","metadata":{"execution":{"iopub.status.busy":"2023-05-20T16:48:21.762439Z","iopub.execute_input":"2023-05-20T16:48:21.763308Z","iopub.status.idle":"2023-05-20T16:48:22.069227Z","shell.execute_reply.started":"2023-05-20T16:48:21.763263Z","shell.execute_reply":"2023-05-20T16:48:22.06794Z"},"trusted":true},"execution_count":4,"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)","Cell \u001b[0;32mIn[4], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m loss_df \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mDataFrame(\u001b[43mhist\u001b[49m\u001b[38;5;241m.\u001b[39mhistory)\n\u001b[1;32m      2\u001b[0m loss_df\n","\u001b[0;31mNameError\u001b[0m: name 'hist' is not defined"],"ename":"NameError","evalue":"name 'hist' is not defined","output_type":"error"}]},{"cell_type":"code","source":"loss_df[[\"loss\", \"val_loss\"]].plot(figsize=(6, 4))\nloss_df[[\"accuracy\", \"val_accuracy\"]].plot(figsize=(6, 4))","metadata":{"execution":{"iopub.status.busy":"2023-05-20T14:31:17.769761Z","iopub.status.idle":"2023-05-20T14:31:17.770533Z","shell.execute_reply.started":"2023-05-20T14:31:17.770274Z","shell.execute_reply":"2023-05-20T14:31:17.770297Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}