{"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":30699,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# 1. Simple Dataset downloading Pipeline","metadata":{}},{"cell_type":"code","source":"import tensorflow as tf\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport os","metadata":{"execution":{"iopub.status.busy":"2024-08-23T06:10:47.700637Z","iopub.execute_input":"2024-08-23T06:10:47.701073Z","iopub.status.idle":"2024-08-23T06:11:03.605009Z","shell.execute_reply.started":"2024-08-23T06:10:47.701038Z","shell.execute_reply":"2024-08-23T06:11:03.603938Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 2 Lines Download\nmnist = tf.keras.datasets.mnist\n(train_images, train_labels), (validation_images, validation_labels) = tf.keras.datasets.mnist.load_data()\n\n# 2 Lines Preprocessing\ntrain_images       = train_images      / 255.0\nvalidation_images  = validation_images / 255.0\n\nclass_names  = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-08-23T03:55:29.566777Z","iopub.execute_input":"2024-08-23T03:55:29.567430Z","iopub.status.idle":"2024-08-23T03:55:30.261197Z","shell.execute_reply.started":"2024-08-23T03:55:29.567382Z","shell.execute_reply":"2024-08-23T03:55:30.260179Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Alternative to read Data from Files. if `load_data() function is giving error`**\n```python\ndf           = pd.read_csv(\"../input/digit-recognizer/train.csv\")\n\ntrain_labels = df['label'].values\ntrain_images = df.drop('label', axis = 1).values\ntrain_images = train_images.reshape(-1, 28, 28)\n\ntrain_labels      = train_labels[      : 40000]\ntrain_images      = train_images[      : 40000]\n\nvalidation_labels = train_labels[40000 :      ]\nvalidation_images = train_images[40000 :      ]\n```","metadata":{}},{"cell_type":"code","source":"plt.imshow(train_images[0].reshape(28,28))\ntrain_labels[0]","metadata":{"execution":{"iopub.status.busy":"2024-08-23T06:17:18.524098Z","iopub.execute_input":"2024-08-23T06:17:18.524503Z","iopub.status.idle":"2024-08-23T06:17:18.811043Z","shell.execute_reply.started":"2024-08-23T06:17:18.524472Z","shell.execute_reply":"2024-08-23T06:17:18.809899Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 2. Simple Model Architecture","metadata":{}},{"cell_type":"code","source":"model = tf.keras.Sequential([\n    tf.keras.layers.Flatten(input_shape=(28, 28)),\n    tf.keras.layers.Dense(128, activation='relu'),\n    tf.keras.layers.Dense(10)\n])\n\nmodel.compile(\n    optimizer = 'adam', \n    loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), \n    metrics = ['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2024-08-23T06:17:44.029381Z","iopub.execute_input":"2024-08-23T06:17:44.029852Z","iopub.status.idle":"2024-08-23T06:17:44.844465Z","shell.execute_reply.started":"2024-08-23T06:17:44.029798Z","shell.execute_reply":"2024-08-23T06:17:44.843308Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{"execution":{"iopub.status.busy":"2024-08-23T06:17:44.909104Z","iopub.execute_input":"2024-08-23T06:17:44.909516Z","iopub.status.idle":"2024-08-23T06:17:44.931987Z","shell.execute_reply.started":"2024-08-23T06:17:44.909484Z","shell.execute_reply":"2024-08-23T06:17:44.930739Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 3. Simple Model Training Pipeline - 97% accuracy","metadata":{}},{"cell_type":"code","source":"model.fit(x = train_images, y = train_labels, epochs=10)\n\nfinal_validation_loss, final_validation_acc = model.evaluate(train_images,  train_labels, verbose=2)\nprint('\\nValidation accuracy:', final_validation_acc)","metadata":{"execution":{"iopub.status.busy":"2024-08-23T06:18:05.477002Z","iopub.execute_input":"2024-08-23T06:18:05.477432Z","iopub.status.idle":"2024-08-23T06:18:49.963562Z","shell.execute_reply.started":"2024-08-23T06:18:05.477399Z","shell.execute_reply":"2024-08-23T06:18:49.962270Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Save & load trained model = Used when \"Training Time is Huuuge. When more than 3 Hours\" \n- Can't train from scratch every time, if takes very long for a training to complete\n- Hence we save a trained model. And next time load that trained model\n\n```python\nmodel.save('./checkpoint/model_128_10.keras')\nloaded_model = tf.keras.models.load_model('./checkpoint/model_128_10.keras')\n    \nloaded_model.summary()\n```","metadata":{}},{"cell_type":"markdown","source":"# 4. Kaggle Submission - 220 Leaderboard Rank out of 1913 submissions","metadata":{}},{"cell_type":"code","source":"test_dataset   = pd.read_csv(\"../input/digit-recognizer/test.csv\")\ntest_dataset   = test_dataset.values.reshape(-1,28,28,1) / 255.0","metadata":{"execution":{"iopub.status.busy":"2024-08-23T03:56:26.623859Z","iopub.execute_input":"2024-08-23T03:56:26.624332Z","iopub.status.idle":"2024-08-23T03:56:29.479081Z","shell.execute_reply.started":"2024-08-23T03:56:26.624295Z","shell.execute_reply":"2024-08-23T03:56:29.477864Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predicted_logits  = model.predict(test_dataset)\n\npredicted_probs   = tf.keras.layers.Softmax() ( predicted_logits )\npredicted_label   = tf.math.argmax(predicted_probs, axis = 1) \n","metadata":{"execution":{"iopub.status.busy":"2024-08-23T03:57:47.790819Z","iopub.execute_input":"2024-08-23T03:57:47.791859Z","iopub.status.idle":"2024-08-23T03:57:49.580962Z","shell.execute_reply.started":"2024-08-23T03:57:47.791815Z","shell.execute_reply":"2024-08-23T03:57:49.579805Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submissions = pd.read_csv(\"../input/digit-recognizer/sample_submission.csv\")\n# Here we will change the Sample Submission value, to predictions that we have calculate\nsubmissions.Label = predicted_label\n\nsubmissions.to_csv(\"submissions_simplest_nn.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2024-08-23T03:58:33.666723Z","iopub.execute_input":"2024-08-23T03:58:33.667497Z","iopub.status.idle":"2024-08-23T03:58:33.720638Z","shell.execute_reply.started":"2024-08-23T03:58:33.667458Z","shell.execute_reply":"2024-08-23T03:58:33.719321Z"},"trusted":true},"execution_count":null,"outputs":[]}]}