{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":3004,"databundleVersionId":861823,"isSourceIdPinned":false,"sourceType":"competition"}],"dockerImageVersionId":31089,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import math, re\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport tensorflow as tf\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-09-18T10:59:07.495899Z","iopub.execute_input":"2025-09-18T10:59:07.496187Z","iopub.status.idle":"2025-09-18T10:59:07.503541Z","shell.execute_reply.started":"2025-09-18T10:59:07.496166Z","shell.execute_reply":"2025-09-18T10:59:07.502407Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from tensorflow import keras\nfrom tensorflow.keras import layers\n# Reproducability\ndef set_seed(seed=122):\n    np.random.seed(seed)\n    tf.random.set_seed(seed)\n    os.environ['PYTHONHASHSEED'] = str(seed)\n    #os.environ['TF_DETERMINISTIC_OPS'] = '1'\nset_seed()\n\n#Importing data\ntrain_df = pd.read_csv('/kaggle/input/digit-recognizer/train.csv')\ntest_df = pd.read_csv('/kaggle/input/digit-recognizer/test.csv')\n\n#Defining features and labels\ny_train = train_df['label'].values\nX_train = train_df.drop('label', axis=1).values\n\n#Normalizing image data\nX_train = X_train.reshape(-1, 28, 28, 1).astype('float32') / 255\nX_test = test_df.values.reshape(-1, 28, 28, 1).astype('float32') / 255\n\n#Splitting training data\nfrom sklearn.model_selection import train_test_split\n\nX_train_split, X_val, y_train_split, y_val = train_test_split(\n    X_train, y_train, test_size=0.1, random_state=42\n)\n\n#Defining the Model\n#ConvNet\nmodel = keras.Sequential([\n    keras.Input(shape=[28,28,1]),\n    layers.Conv2D(filters=32, kernel_size=3, activation='relu', padding='same'),\n    layers.MaxPool2D(),\n    layers.Conv2D(filters=64, kernel_size=3, activation='relu', padding='same'),\n    layers.MaxPool2D(),\n#Multi-Classifier Head\n    layers.Flatten(),\n    layers.Dense(128, activation='relu'),\n    layers.Dense(10, activation='softmax') #10 digits, softmax for probabilties over multiple classifiers\n])\n\n#Training the Model\nmodel.compile(\n    optimizer='adam',\n    loss='sparse_categorical_crossentropy',\n    metrics=['accuracy']\n)\n\nhistory = model.fit(\n    X_train_split,\n    y_train_split,\n    validation_data=(X_val,y_val),\n    epochs=20,\n    batch_size=64,\n    verbose=1\n)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-09-18T11:08:12.027934Z","iopub.execute_input":"2025-09-18T11:08:12.028279Z","iopub.status.idle":"2025-09-18T11:14:13.024278Z","shell.execute_reply.started":"2025-09-18T11:08:12.028255Z","shell.execute_reply":"2025-09-18T11:14:13.023506Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#Predicting on test set\ny_pred_prob = model.predict(X_test)\ny_pred=y_pred_prob.argmax(axis=1) #convert probabilities to classes\n\n\nsubmission = pd.DataFrame({\n    \"ImageId\": range(1, len(y_pred)+1),\n    \"Label\": y_pred\n})\n\nsubmission.to_csv(\"submission.csv\", index=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-09-18T11:16:42.619845Z","iopub.execute_input":"2025-09-18T11:16:42.620103Z","iopub.status.idle":"2025-09-18T11:16:47.707065Z","shell.execute_reply.started":"2025-09-18T11:16:42.620084Z","shell.execute_reply":"2025-09-18T11:16:47.705871Z"}},"outputs":[],"execution_count":null}]}