{"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":"gpu","dataSources":[{"sourceId":3649,"databundleVersionId":46718,"sourceType":"competition"}],"dockerImageVersionId":30698,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# 1. Simple Dataset reading pipeline","metadata":{}},{"cell_type":"code","source":"import tensorflow as tf\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport pandas as pd","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 2 Lines Download\ncifar10 = tf.keras.datasets.cifar10\n(train_images, train_labels), (validation_images, validation_labels) = cifar10.load_data()\n\n# 2 Lines Preprocessing\n# train_images       = train_images      / 255.0\n# validation_images  = validation_images / 255.0\n\nclass_names  = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']","metadata":{"execution":{"iopub.status.busy":"2024-08-23T07:34:32.673785Z","iopub.execute_input":"2024-08-23T07:34:32.674309Z","iopub.status.idle":"2024-08-23T07:34:33.416029Z","shell.execute_reply.started":"2024-08-23T07:34:32.674269Z","shell.execute_reply":"2024-08-23T07:34:33.414583Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.imshow(train_images[0])\ntrain_labels[0]\n\ntrain_images.shape ","metadata":{"execution":{"iopub.status.busy":"2024-08-23T06:42:16.153412Z","iopub.execute_input":"2024-08-23T06:42:16.153868Z","iopub.status.idle":"2024-08-23T06:42:16.432668Z","shell.execute_reply.started":"2024-08-23T06:42:16.153838Z","shell.execute_reply":"2024-08-23T06:42:16.431595Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 2. Model Architecture Experiments","metadata":{}},{"cell_type":"markdown","source":"## Experiment 1","metadata":{}},{"cell_type":"code","source":"model_1 = tf.keras.Sequential([\n    tf.keras.layers.Input(shape=(32, 32, 3)),\n    tf.keras.layers.Rescaling (scale=1./255 ),\n    \n    tf.keras.layers.Flatten(),\n    tf.keras.layers.Dense(128, activation='relu'),\n    tf.keras.layers.Dense(10)\n])","metadata":{"execution":{"iopub.status.busy":"2024-08-23T06:42:21.473107Z","iopub.execute_input":"2024-08-23T06:42:21.473508Z","iopub.status.idle":"2024-08-23T06:42:22.225206Z","shell.execute_reply.started":"2024-08-23T06:42:21.473477Z","shell.execute_reply":"2024-08-23T06:42:22.224236Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_1.compile(optimizer = 'adam', loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics = ['accuracy'])\nmodel_1.fit(x = train_images, y = train_labels, validation_data = (validation_images,  validation_labels), epochs=10)","metadata":{"execution":{"iopub.status.busy":"2024-08-23T06:42:22.226867Z","iopub.execute_input":"2024-08-23T06:42:22.227182Z","iopub.status.idle":"2024-08-23T06:43:02.561531Z","shell.execute_reply.started":"2024-08-23T06:42:22.227155Z","shell.execute_reply":"2024-08-23T06:43:02.560423Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Experiment 2","metadata":{}},{"cell_type":"code","source":"model_2 = tf.keras.Sequential([\n    tf.keras.layers.Input(shape=(32, 32, 3)),\n    tf.keras.layers.Rescaling (scale=1./255 ),\n    \n    tf.keras.layers.Conv2D(filters = 128, kernel_size=(32,32), activation=\"relu\"),\n    tf.keras.layers.Flatten(),\n    \n    tf.keras.layers.Dense(units = 10 ),\n])\n\n","metadata":{"execution":{"iopub.status.busy":"2024-08-23T07:34:38.360257Z","iopub.execute_input":"2024-08-23T07:34:38.361186Z","iopub.status.idle":"2024-08-23T07:34:38.393773Z","shell.execute_reply.started":"2024-08-23T07:34:38.361152Z","shell.execute_reply":"2024-08-23T07:34:38.392836Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_2.compile(optimizer = 'adam', loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics = ['accuracy'])\nmodel_2.fit(x = train_images, y = train_labels, validation_data = (validation_images,  validation_labels), epochs=10)","metadata":{"execution":{"iopub.status.busy":"2024-08-23T07:34:38.672320Z","iopub.execute_input":"2024-08-23T07:34:38.673061Z","iopub.status.idle":"2024-08-23T07:35:18.230428Z","shell.execute_reply.started":"2024-08-23T07:34:38.673029Z","shell.execute_reply":"2024-08-23T07:35:18.229337Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Experiment 3","metadata":{}},{"cell_type":"code","source":"model_3 = tf.keras.Sequential([\n    tf.keras.layers.Input(shape=(32, 32, 3)),\n    \n    tf.keras.layers.Conv2D(filters = 32, kernel_size=(16,16), activation=\"relu\"),\n    tf.keras.layers.Conv2D(filters = 32, kernel_size=(16,16), activation=\"relu\"),\n    tf.keras.layers.Flatten(),\n    \n    tf.keras.layers.Dense(units = 10 ),\n])\n\nmodel_3.compile(optimizer = 'adam', loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics = ['accuracy'])\nmodel_3.fit(x = train_images, y = train_labels, validation_data = (validation_images,  validation_labels), epochs=10)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Experiment 4","metadata":{}},{"cell_type":"code","source":"model_4 = tf.keras.Sequential([\n    tf.keras.layers.Input(shape=(32, 32, 3)),\n    \n    tf.keras.layers.Conv2D(filters = 32, kernel_size=(8,8), activation=\"relu\"), \n    tf.keras.layers.Conv2D(filters = 32, kernel_size=(8,8), activation=\"relu\"), \n    tf.keras.layers.Conv2D(filters = 32, kernel_size=(8,8), activation=\"relu\"), \n    tf.keras.layers.Conv2D(filters = 32, kernel_size=(8,8), activation=\"relu\"), \n    \n    tf.keras.layers.Flatten(),\n    \n    tf.keras.layers.Dense(units = 100 , activation=\"relu\"),\n    tf.keras.layers.Dense(units = 10 ),\n])\n\nmodel_4.compile(optimizer = 'adam', loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics = ['accuracy'])\nmodel_4.fit(x = train_images, y = train_labels, validation_data = (validation_images,  validation_labels), epochs=10)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Experiment 5","metadata":{}},{"cell_type":"code","source":"model_5 = tf.keras.Sequential([\n    tf.keras.layers.Input(shape=(32, 32, 3)),\n    \n    tf.keras.layers.Conv2D( filters = 32, kernel_size=(4,4), activation='relu'),\n    tf.keras.layers.MaxPool2D(pool_size=(2,2), strides = 2),\n    tf.keras.layers.Conv2D( filters = 32, kernel_size=(4,4), activation='relu'),\n    tf.keras.layers.MaxPool2D(pool_size=(2,2), strides = 2),\n    \n    tf.keras.layers.Flatten(),\n    tf.keras.layers.Dense(256, activation='relu'),\n    tf.keras.layers.Dense(10, )\n])\n\nmodel_5.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])\n\nmodel_5.compile(optimizer = 'adam', loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics = ['accuracy'])\nmodel_5.fit(x = train_images, y = train_labels, validation_data = (validation_images,  validation_labels), epochs=10)\nmodel_5.save(\"model_5_checkpoint_trained_weights.h5\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Saving Trained Model","metadata":{}},{"cell_type":"code","source":"new_model = tf.keras.models.load_model(\"model_5_checkpoint_trained_weights.h5\")","metadata":{"execution":{"iopub.status.busy":"2024-05-27T11:56:29.554345Z","iopub.execute_input":"2024-05-27T11:56:29.555205Z","iopub.status.idle":"2024-05-27T11:56:29.634683Z","shell.execute_reply.started":"2024-05-27T11:56:29.555171Z","shell.execute_reply":"2024-05-27T11:56:29.633953Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Kaggle Competition Submission","metadata":{}},{"cell_type":"code","source":"!pip install py7zr\nimport py7zr\n\nwith py7zr.SevenZipFile('/kaggle/input/cifar-10/train.7z' , mode='r') as z:\n    z.extractall(\"/kaggle/working/\")\n    \n# CHANGE KAGGLE SETTING TO PERSISTANCE OF FILES","metadata":{"_kg_hide-output":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_dataset = tf.keras.preprocessing.image_dataset_from_directory(\n    directory=\"/kaggle/working/test/\",\n    labels= None,\n    label_mode= None,\n    class_names=None,\n    color_mode='rgb',\n    batch_size=1, image_size= (32,32), \n    shuffle=False)","metadata":{"execution":{"iopub.status.busy":"2024-08-23T07:36:29.761027Z","iopub.execute_input":"2024-08-23T07:36:29.761468Z","iopub.status.idle":"2024-08-23T07:36:46.032296Z","shell.execute_reply.started":"2024-08-23T07:36:29.761433Z","shell.execute_reply":"2024-08-23T07:36:46.031398Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# TAKES 6 MINUTES TO RUN THIS. Because testing images are 0.3 million images. Takes long time to process\npredicted_probabilities = model_2.predict(test_dataset)\npredicted_class_ids     = tf.math.argmax ( predicted_probabilities , axis = 1).numpy()","metadata":{"execution":{"iopub.status.busy":"2024-08-23T07:36:48.598841Z","iopub.execute_input":"2024-08-23T07:36:48.599237Z","iopub.status.idle":"2024-08-23T07:45:35.958445Z","shell.execute_reply.started":"2024-08-23T07:36:48.599195Z","shell.execute_reply":"2024-08-23T07:45:35.957335Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_ids        = []\npredicted_labels = []\nfor index, class_id in enumerate(predicted_class_ids):\n    class_name_string = class_names[class_id]\n    \n    predicted_labels.append(class_name_string)\n    image_ids.       append(index+1)\n    \nprediction_df = pd.DataFrame({'id': image_ids, 'label': predicted_labels})","metadata":{"execution":{"iopub.status.busy":"2024-08-23T07:46:10.638059Z","iopub.execute_input":"2024-08-23T07:46:10.638504Z","iopub.status.idle":"2024-08-23T07:46:11.012771Z","shell.execute_reply.started":"2024-08-23T07:46:10.638473Z","shell.execute_reply":"2024-08-23T07:46:11.011666Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction_df.to_csv(\"submissions_cifar10_conv.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2024-08-23T07:46:12.759808Z","iopub.execute_input":"2024-08-23T07:46:12.760194Z","iopub.status.idle":"2024-08-23T07:46:13.223125Z","shell.execute_reply.started":"2024-08-23T07:46:12.760162Z","shell.execute_reply":"2024-08-23T07:46:13.221854Z"},"trusted":true},"execution_count":null,"outputs":[]}]}