{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":3004,"databundleVersionId":861823,"sourceType":"competition"}],"dockerImageVersionId":30673,"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\nimport tensorflow as tf\nfrom tensorflow.keras import layers, models\nfrom tensorflow.keras.utils import to_categorical\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler\n\ntrain = pd.read_csv('/kaggle/input/digit-recognizer/train.csv')\ntest = pd.read_csv('/kaggle/input/digit-recognizer/test.csv')\n\ntrain_images = train.drop('label', axis=1).values\ntrain_labels = train['label'].values\n\ntrain_images, val_images, train_labels, val_labels = train_test_split(train_images, train_labels, test_size=0.2, random_state=42)\n\n# Normalize the data\nscaler = StandardScaler()\ntrain_images = scaler.fit_transform(train_images)\nval_images = scaler.transform(val_images)\n\ntrain_images = train_images.reshape((train_images.shape[0], 28, 28, 1)).astype('float32')\nval_images = val_images.reshape((val_images.shape[0], 28, 28, 1)).astype('float32')\n\ntrain_labels = to_categorical(train_labels)\nval_labels = to_categorical(val_labels)\n\nmodel = models.Sequential([\n    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),\n    layers.MaxPooling2D((2, 2)),\n    layers.Conv2D(64, (3, 3), activation='relu'),\n    layers.MaxPooling2D((2, 2)),\n    layers.Conv2D(64, (3, 3), activation='relu'),\n    layers.Flatten(),\n    layers.Dense(64, activation='relu'),\n    layers.Dense(10, activation='softmax')\n])\n\nmodel.compile(optimizer='adam',\n              loss='categorical_crossentropy',\n              metrics=['accuracy'])\n\nmodel.fit(train_images, train_labels, epochs=10, batch_size=128, validation_data=(val_images, val_labels))\n\ntest_images = test.values.reshape((test.shape[0], 28, 28, 1)).astype('float32')\n\n# Apply scaler to each image separately\nscaled_test_images = np.zeros_like(test_images)\nfor i in range(test_images.shape[0]):\n    scaled_test_images[i] = scaler.transform(test_images[i].reshape(1, -1)).reshape(28, 28, 1)\n\npredictions = model.predict(scaled_test_images)\n\n# Save the predictions to a CSV file\nsubmission = pd.DataFrame({'ImageId': range(1, test.shape[0] + 1), 'Label': np.argmax(predictions, axis=1)})\nsubmission.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2024-03-25T01:02:00.539333Z","iopub.execute_input":"2024-03-25T01:02:00.539699Z","iopub.status.idle":"2024-03-25T01:02:25.221928Z","shell.execute_reply.started":"2024-03-25T01:02:00.539669Z","shell.execute_reply":"2024-03-25T01:02:25.221082Z"},"trusted":true},"execution_count":null,"outputs":[]}]}