{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","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,"sourceType":"competition"}],"dockerImageVersionId":30761,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom sklearn.model_selection import train_test_split","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-09-08T22:01:06.115516Z","iopub.execute_input":"2024-09-08T22:01:06.115958Z","iopub.status.idle":"2024-09-08T22:01:06.123119Z","shell.execute_reply.started":"2024-09-08T22:01:06.115916Z","shell.execute_reply":"2024-09-08T22:01:06.121657Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#cargar los datos de entrenamiento\ntrain_data = pd.read_csv('/kaggle/input/digit-recognizer/train.csv')\nx_train = train_data.drop(columns=['label'])\ny_train = train_data['label']","metadata":{"execution":{"iopub.status.busy":"2024-09-08T22:02:54.048468Z","iopub.execute_input":"2024-09-08T22:02:54.049582Z","iopub.status.idle":"2024-09-08T22:02:57.503330Z","shell.execute_reply.started":"2024-09-08T22:02:54.049472Z","shell.execute_reply":"2024-09-08T22:02:57.501856Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#cargar los datos de test\nx_test = pd.read_csv('/kaggle/input/digit-recognizer/test.csv')","metadata":{"execution":{"iopub.status.busy":"2024-09-08T22:03:00.041047Z","iopub.execute_input":"2024-09-08T22:03:00.041577Z","iopub.status.idle":"2024-09-08T22:03:02.182408Z","shell.execute_reply.started":"2024-09-08T22:03:00.041528Z","shell.execute_reply":"2024-09-08T22:03:02.180718Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Preprocesamos los datos\n# Cambiar la forma de los datos a 28x28 para que sean imágenes\nx_train = x_train.values.reshape(-1, 28, 28)\nx_test = x_test.values.reshape(-1, 28, 28)\n\nx_train = x_train.astype(\"float32\") / 255.0\nx_test = x_test.astype(\"float32\") / 255.0\n\n# Dividimos el set de entrenamiento en 80% para entrenamiento y 20% para evaluar el modelo\nX_train, X_eval, Y_train, Y_eval = train_test_split(x_train, y_train, test_size=0.2, random_state=42)\n\n# Definimos el modelo\nmodel = keras.Sequential(\n    [\n        keras.Input(shape=(28, 28)),\n        layers.Flatten(),\n        layers.Dense(128, activation=\"relu\"),\n        layers.Dense(10, activation=\"softmax\"),\n    ]\n)\n# Compilamos el modelo\nmodel.compile(loss=\"sparse_categorical_crossentropy\", optimizer=\"adam\", metrics=[\"accuracy\"])\n\n# Entrenamos el modelo\nhistory = model.fit(X_train, Y_train, epochs=20)\n\n# Evaluamos el modelo\nloss, accuracy = model.evaluate(X_eval, Y_eval, verbose=0)\nprint(\"Loss:\", loss)\nprint(\"Accuracy:\", accuracy)","metadata":{"execution":{"iopub.status.busy":"2024-09-08T22:03:04.012732Z","iopub.execute_input":"2024-09-08T22:03:04.013211Z","iopub.status.idle":"2024-09-08T22:04:18.231601Z","shell.execute_reply.started":"2024-09-08T22:03:04.013168Z","shell.execute_reply":"2024-09-08T22:04:18.230220Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(history.history['loss'])\nplt.title('Función de Pérdida')\nplt.ylabel('Pérdida')\nplt.xlabel('Época')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-09-08T22:04:46.925171Z","iopub.execute_input":"2024-09-08T22:04:46.925687Z","iopub.status.idle":"2024-09-08T22:04:47.237896Z","shell.execute_reply.started":"2024-09-08T22:04:46.925609Z","shell.execute_reply":"2024-09-08T22:04:47.236564Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nnum_images_to_show = 9\nplt.figure(figsize=(5, 5))\nfor i in range(num_images_to_show):\n    plt.subplot(3, 3, i + 1)\n    plt.imshow(x_test[i], cmap='gray')\n    prediction = model.predict(x_test[i].reshape(1, 28, 28))\n    predicted_label = prediction.argmax()\n    plt.title(f\"Pred: {predicted_label}\")\n    plt.axis('off')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-09-08T22:05:12.770385Z","iopub.execute_input":"2024-09-08T22:05:12.770938Z","iopub.status.idle":"2024-09-08T22:05:14.187943Z","shell.execute_reply.started":"2024-09-08T22:05:12.770891Z","shell.execute_reply":"2024-09-08T22:05:14.186691Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#generar predicciones con el set de test\n# Hacer predicciones en los datos de prueba\npredictions = model.predict(x_test)\n\n# Obtener la clase con la mayor probabilidad para cada imagen\npredicted_labels = np.argmax(predictions, axis=1)\n\n# Crear un DataFrame para el envío\nsubmission = pd.DataFrame({\n    'ImageId': np.arange(1, len(predicted_labels) + 1),\n    'Label': predicted_labels\n})\n\n# Guardar el archivo CSV para subirlo a Kaggle\nsubmission.to_csv('submission.csv', index=False)\n","metadata":{"execution":{"iopub.status.busy":"2024-09-08T22:12:40.880479Z","iopub.execute_input":"2024-09-08T22:12:40.881240Z","iopub.status.idle":"2024-09-08T22:12:42.766408Z","shell.execute_reply.started":"2024-09-08T22:12:40.881193Z","shell.execute_reply":"2024-09-08T22:12:42.765339Z"},"trusted":true},"execution_count":null,"outputs":[]}]}