{"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":"none","dataSources":[{"sourceId":3004,"databundleVersionId":861823,"sourceType":"competition"}],"dockerImageVersionId":30698,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# Import necessary libraries\n\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\nfrom tensorflow.keras import layers, models\nimport matplotlib.pyplot as plt\nimport cv2\nimport os\nfrom keras.models import Sequential\nfrom keras.layers import Activation, Dense, Flatten, Dropout, Conv2D, MaxPooling2D\nfrom sklearn.metrics import confusion_matrix\nimport seaborn as sns","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-05-30T06:05:50.657325Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Load the MNIST dataset from CSV files\ndataset_path_train = '/kaggle/input/digit-recognizer/train.csv'\ndataset_path_test = '/kaggle/input/digit-recognizer/test.csv'\n\n# Read training and test datasets\ntrain_data = pd.read_csv(dataset_path_train)\ntest_data = pd.read_csv(dataset_path_test)\n\n# Split features and labels in the training dataset\nx_train = train_data.drop('label', axis=1).values\ny_train = train_data['label'].values\n\n# For the test dataset, assuming it does not have labels\nx_test = test_data.values","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Create a simple MLP model\nmodel = models.Sequential([\n    layers.Input(shape=(28 * 28,)), # Input layer as a 28*28 1 dimensional array\n    layers.Dense(128, activation='relu'), # Hidden layer\n    layers.Dense(10, activation='softmax') # Output layer\n])\n\n# Compile the model\nmodel.compile(optimizer='adam',\n              loss='sparse_categorical_crossentropy',\n              metrics=['accuracy'])\n\n# Print the model summary\nmodel.summary()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Train the model\nhistory = model.fit(x_train, y_train, epochs=10, validation_split=0.1)\n\n# Predict the classes with the model on the test data\npredictions = model.predict(x_test)\npredicted_classes = np.argmax(predictions, axis=1)\n\n# Create a DataFrame for submission\nsubmission = pd.DataFrame({\n    \"ImageId\": range(1, len(predicted_classes)+1),\n    \"Label\": predicted_classes\n})\n\n# Save the DataFrame to a CSV file to upload to Kaggle\nsubmission.to_csv('submission.csv', index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Plot training & validation accuracy values\nplt.figure(figsize=(10, 5))\nplt.plot(history.history['accuracy'], label='Train Accuracy')\nplt.plot(history.history['val_accuracy'], label='Validation Accuracy')\nplt.title('Model accuracy')\nplt.ylabel('Accuracy')\nplt.xlabel('Epoch')\nplt.legend(loc='upper left')\nplt.show()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Plot training & validation loss values\nplt.figure(figsize=(10, 5))\nplt.plot(history.history['loss'], label='Train Loss')\nplt.plot(history.history['val_loss'], label='Validation Loss')\nplt.title('Model loss')\nplt.ylabel('Loss')\nplt.xlabel('Epoch')\nplt.legend(loc='upper left')\nplt.show()","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}