{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceType":"competition","sourceId":3004,"databundleVersionId":861823}],"dockerImageVersionId":31328,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np \nimport pandas as pd \n\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":"2026-04-20T07:13:55.991666Z","iopub.execute_input":"2026-04-20T07:13:55.991937Z","iopub.status.idle":"2026-04-20T07:13:55.999336Z","shell.execute_reply.started":"2026-04-20T07:13:55.991912Z","shell.execute_reply":"2026-04-20T07:13:55.998373Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nfrom tensorflow.keras.utils import to_categorical\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import (\n    Input, Conv2D, MaxPooling2D, Flatten, Dense, Dropout,\n    BatchNormalization, RandomRotation, RandomTranslation, RandomZoom\n)\nfrom tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau\nfrom tensorflow.keras.optimizers import AdamW\n\ntrain = pd.read_csv(\"/kaggle/input/competitions/digit-recognizer/train.csv\")\ntest = pd.read_csv(\"/kaggle/input/competitions/digit-recognizer/test.csv\")\n\ny = train[\"label\"].values\nx = train.drop(columns=[\"label\"]).values.astype(\"float32\") / 255.0\nx_test = test.values.astype(\"float32\") / 255.0\n\nx = x.reshape(-1, 28, 28, 1)\nx_test = x_test.reshape(-1, 28, 28, 1)\ny_cat = to_categorical(y, num_classes=10)\n\nx_train, x_valid, y_train, y_valid = train_test_split(\n    x, y_cat, test_size=0.2, random_state=42, stratify=y\n)\n\nmodel = Sequential([\n    Input(shape=(28, 28, 1)),\n\n    RandomRotation(0.05),\n    RandomTranslation(0.08, 0.08),\n    RandomZoom(0.08),\n    \n    Conv2D(32, (3, 3), activation=\"relu\", padding=\"same\"),\n    BatchNormalization(),\n    Conv2D(32, (3, 3), activation=\"relu\", padding=\"same\"),\n    BatchNormalization(),\n    MaxPooling2D((2, 2)),\n    Dropout(0.25),\n\n    Conv2D(64, (3, 3), activation=\"relu\", padding=\"same\"),\n    BatchNormalization(),\n    Conv2D(64, (3, 3), activation=\"relu\", padding=\"same\"),\n    BatchNormalization(),\n    MaxPooling2D((2, 2)),\n    Dropout(0.25),\n\n    Conv2D(128, (3, 3), activation=\"relu\", padding=\"same\"),\n    BatchNormalization(),\n    Dropout(0.25),\n\n    Flatten(),\n    Dense(256, activation=\"relu\"),\n    BatchNormalization(),\n    Dropout(0.5),\n    Dense(10, activation=\"softmax\")\n])\n\nmodel.compile(\n    optimizer=AdamW(learning_rate=0.0005, weight_decay=1e-4),\n    loss=\"categorical_crossentropy\",\n    metrics=[\"accuracy\"]\n)\n\nearly_stop = EarlyStopping(\n    monitor=\"val_accuracy\",\n    patience=8,\n    restore_best_weights=True\n)\n\nreduce_lr = ReduceLROnPlateau(\n    monitor=\"val_accuracy\",\n    factor=0.5,\n    patience=3,\n    min_lr=1e-6,\n    verbose=1\n)\n\nmodel.fit(\n    x_train, y_train,\n    validation_data=(x_valid, y_valid),\n    epochs=30,\n    batch_size=64,\n    callbacks=[early_stop, reduce_lr],\n    verbose=1\n)\n\npred = model.predict(x_test, verbose=0)\ntest_pred = np.argmax(pred, axis=1)\n\nsubmission = pd.DataFrame({\n    \"ImageId\": np.arange(1, len(test_pred) + 1),\n    \"Label\": test_pred\n})\n\nsubmission.to_csv(\"/kaggle/working/submission.csv\", index=False)\nprint(\"submission.csv saved!\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-04-20T07:28:10.933059Z","iopub.execute_input":"2026-04-20T07:28:10.933847Z","iopub.status.idle":"2026-04-20T07:32:26.614161Z","shell.execute_reply.started":"2026-04-20T07:28:10.933813Z","shell.execute_reply":"2026-04-20T07:32:26.613123Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}