{"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"colab":{"provenance":[]},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":3004,"databundleVersionId":861823,"sourceType":"competition"}],"dockerImageVersionId":30839,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Importing libraries","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport warnings\nwarnings.filterwarnings('ignore')\nimport tensorflow as tf\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import accuracy_score","metadata":{"id":"DJMBkJ_3Njbn","trusted":true,"execution":{"iopub.status.busy":"2025-02-06T12:03:30.630080Z","iopub.execute_input":"2025-02-06T12:03:30.630435Z","iopub.status.idle":"2025-02-06T12:03:30.635401Z","shell.execute_reply.started":"2025-02-06T12:03:30.630406Z","shell.execute_reply":"2025-02-06T12:03:30.634452Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Importing data","metadata":{}},{"cell_type":"code","source":"df = pd.read_csv('/kaggle/input/digit-recognizer/train.csv')\ndf.head()","metadata":{"id":"1eoMuLTeQnsr","outputId":"17a73792-8db5-4f19-c1ec-4bd3265d05e0","trusted":true,"execution":{"iopub.status.busy":"2025-02-06T12:03:30.662331Z","iopub.execute_input":"2025-02-06T12:03:30.662642Z","iopub.status.idle":"2025-02-06T12:03:34.186315Z","shell.execute_reply.started":"2025-02-06T12:03:30.662618Z","shell.execute_reply":"2025-02-06T12:03:34.185258Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Feature Engineering And splitting data","metadata":{}},{"cell_type":"code","source":"x = df.drop('label', axis=1).values\nx = x.reshape(-1, 28, 28, 1)  # Reshape to (num_samples, 28, 28, 1)\nx = x / 255.0\ny = df['label']\nx_train, x_test,y_train,y_test = train_test_split(x,y, train_size = 0.8, random_state = 42)","metadata":{"id":"AyOyYMvUTwtY","trusted":true,"execution":{"iopub.status.busy":"2025-02-06T12:14:44.631620Z","iopub.execute_input":"2025-02-06T12:14:44.631935Z","iopub.status.idle":"2025-02-06T12:14:45.277185Z","shell.execute_reply.started":"2025-02-06T12:14:44.631911Z","shell.execute_reply":"2025-02-06T12:14:45.276418Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Callback Function","metadata":{}},{"cell_type":"code","source":"class MyCallback(tf.keras.callbacks.Callback):\n    def on_epoch_end(self, epoch, logs={}):\n        if(logs.get('accuracy')>0.999):\n            print(\"\\nReached 99.9% accuracy so cancelling training!\")\n            self.model.stop_training = True","metadata":{"id":"a0W8G9Lj6_3M","trusted":true,"execution":{"iopub.status.busy":"2025-02-06T12:25:51.224157Z","iopub.execute_input":"2025-02-06T12:25:51.224518Z","iopub.status.idle":"2025-02-06T12:25:51.229683Z","shell.execute_reply.started":"2025-02-06T12:25:51.224492Z","shell.execute_reply":"2025-02-06T12:25:51.228476Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Model Building","metadata":{}},{"cell_type":"code","source":"model = tf.keras.models.Sequential([\n\t\ttf.keras.layers.Input(shape=(28,28,1)),\n        tf.keras.layers.Conv2D(64, (3,3), activation = \"relu\"),\n        tf.keras.layers.MaxPooling2D(2,2),\n        tf.keras.layers.Conv2D(64, (3,3), activation = \"relu\"),\n        tf.keras.layers.MaxPooling2D(2,2),\n        tf.keras.layers.Flatten(),\n        tf.keras.layers.Dense(128, activation='relu'),\n        tf.keras.layers.Dense(10, activation='softmax')\n])","metadata":{"id":"vAbirWetUAOL","trusted":true,"execution":{"iopub.status.busy":"2025-02-06T12:25:52.782969Z","iopub.execute_input":"2025-02-06T12:25:52.783349Z","iopub.status.idle":"2025-02-06T12:25:52.828360Z","shell.execute_reply.started":"2025-02-06T12:25:52.783320Z","shell.execute_reply":"2025-02-06T12:25:52.827473Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss='sparse_categorical_crossentropy', metrics=['accuracy'])","metadata":{"id":"qFidobJKU0GN","trusted":true,"execution":{"iopub.status.busy":"2025-02-06T12:25:54.023015Z","iopub.execute_input":"2025-02-06T12:25:54.023367Z","iopub.status.idle":"2025-02-06T12:25:54.032724Z","shell.execute_reply.started":"2025-02-06T12:25:54.023337Z","shell.execute_reply":"2025-02-06T12:25:54.031759Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model.fit(x_train, y_train, epochs=100, callbacks = [MyCallback()])","metadata":{"id":"JEd-we1tVxXA","outputId":"8e3e1eea-5836-4087-b90b-5a9d69ddf5e1","trusted":true,"execution":{"iopub.status.busy":"2025-02-06T12:25:54.809680Z","iopub.execute_input":"2025-02-06T12:25:54.810020Z","iopub.status.idle":"2025-02-06T12:32:44.429034Z","shell.execute_reply.started":"2025-02-06T12:25:54.809965Z","shell.execute_reply":"2025-02-06T12:32:44.428095Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Model Testing","metadata":{}},{"cell_type":"code","source":"y_hat = model.predict(x_test)\ny_hat = np.argmax(y_hat, axis = 1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-06T12:13:45.463505Z","iopub.execute_input":"2025-02-06T12:13:45.463826Z","iopub.status.idle":"2025-02-06T12:13:47.673558Z","shell.execute_reply.started":"2025-02-06T12:13:45.463802Z","shell.execute_reply":"2025-02-06T12:13:47.672519Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"accuracy_score(y_hat, y_test)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-02-06T12:13:51.049569Z","iopub.execute_input":"2025-02-06T12:13:51.049914Z","iopub.status.idle":"2025-02-06T12:13:51.057904Z","shell.execute_reply.started":"2025-02-06T12:13:51.049886Z","shell.execute_reply":"2025-02-06T12:13:51.056975Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}