{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\nimport os\nfor dirpath, dirnames, filename in os.walk('/kaggle/input'):\n    print (f\"There are {len(dirnames)} directories and {len(filename)} files in '{dirpath}' \")\n\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-10-30T11:37:37.708633Z","iopub.execute_input":"2022-10-30T11:37:37.709461Z","iopub.status.idle":"2022-10-30T11:37:41.238712Z","shell.execute_reply.started":"2022-10-30T11:37:37.709360Z","shell.execute_reply":"2022-10-30T11:37:41.237366Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## browse the directories\nprint (os.listdir(\"/kaggle/input/deep-learning-sszg529-bits-pilani\"))\n\n\nprint (os.listdir(\"/kaggle/input/deep-learning-sszg529-bits-pilani/train_data/train_data\"))","metadata":{"execution":{"iopub.status.busy":"2022-10-30T11:37:41.240864Z","iopub.execute_input":"2022-10-30T11:37:41.241194Z","iopub.status.idle":"2022-10-30T11:37:41.247972Z","shell.execute_reply.started":"2022-10-30T11:37:41.241164Z","shell.execute_reply":"2022-10-30T11:37:41.247054Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## **Visualize** the Data","metadata":{}},{"cell_type":"code","source":"# lets visualize images\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mpimg\nimport random","metadata":{"execution":{"iopub.status.busy":"2022-10-30T11:37:41.249501Z","iopub.execute_input":"2022-10-30T11:37:41.250712Z","iopub.status.idle":"2022-10-30T11:37:41.259946Z","shell.execute_reply.started":"2022-10-30T11:37:41.250677Z","shell.execute_reply":"2022-10-30T11:37:41.258294Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def view_random_images(target_dir, target_class, num_images=6, figsize=(15, 7)):\n    path = os.listdir(target_dir + \"/\" + target_class) \n    random_images = random.sample(path, num_images)\n    \n    # show the image\n    plt.figure(figsize=figsize, tight_layout = True)\n    \n    for idx, rand_img in enumerate(random_images):\n        img_path = target_dir + target_class + \"/\" +  rand_img\n        plt.subplot(1, len(random_images), idx+1)\n        plt.imshow(mpimg.imread(img_path ))\n    \n    # return the last image\n    return rand_img ","metadata":{"execution":{"iopub.status.busy":"2022-10-30T11:37:41.262861Z","iopub.execute_input":"2022-10-30T11:37:41.263270Z","iopub.status.idle":"2022-10-30T11:37:41.276187Z","shell.execute_reply.started":"2022-10-30T11:37:41.263238Z","shell.execute_reply":"2022-10-30T11:37:41.274473Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_dir = '/kaggle/input/deep-learning-sszg529-bits-pilani/train_data/train_data/'\ntest_dir = '/kaggle/input/deep-learning-sszg529-bits-pilani/test_data/'","metadata":{"execution":{"iopub.status.busy":"2022-10-30T11:37:41.278735Z","iopub.execute_input":"2022-10-30T11:37:41.279421Z","iopub.status.idle":"2022-10-30T11:37:41.286361Z","shell.execute_reply.started":"2022-10-30T11:37:41.279371Z","shell.execute_reply":"2022-10-30T11:37:41.284802Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Image of type **Anger**","metadata":{}},{"cell_type":"code","source":"view_random_images(train_dir, 'Anger' , num_images=5)\nview_random_images(train_dir, 'Anger' , num_images=5)","metadata":{"execution":{"iopub.status.busy":"2022-10-30T11:37:41.288025Z","iopub.execute_input":"2022-10-30T11:37:41.288828Z","iopub.status.idle":"2022-10-30T11:37:44.190520Z","shell.execute_reply.started":"2022-10-30T11:37:41.288794Z","shell.execute_reply":"2022-10-30T11:37:44.189353Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Image of type **Surprise**","metadata":{}},{"cell_type":"code","source":"view_random_images(train_dir, 'Surprise' , num_images=5)\nview_random_images(train_dir, 'Surprise' , num_images=5)","metadata":{"execution":{"iopub.status.busy":"2022-10-30T11:37:44.192084Z","iopub.execute_input":"2022-10-30T11:37:44.193326Z","iopub.status.idle":"2022-10-30T11:37:46.826054Z","shell.execute_reply.started":"2022-10-30T11:37:44.193269Z","shell.execute_reply":"2022-10-30T11:37:46.824923Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Image of type **Contempt**","metadata":{}},{"cell_type":"code","source":"view_random_images(train_dir, 'Contempt' , num_images=5)\nview_random_images(train_dir, 'Contempt' , num_images=5)","metadata":{"execution":{"iopub.status.busy":"2022-10-30T11:37:46.827959Z","iopub.execute_input":"2022-10-30T11:37:46.828437Z","iopub.status.idle":"2022-10-30T11:37:49.674819Z","shell.execute_reply.started":"2022-10-30T11:37:46.828387Z","shell.execute_reply":"2022-10-30T11:37:49.673634Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Image of type **Happiness**","metadata":{}},{"cell_type":"code","source":"\nview_random_images(train_dir, 'Happiness' , num_images=5)\nview_random_images(train_dir, 'Happiness' , num_images=5)","metadata":{"execution":{"iopub.status.busy":"2022-10-30T11:37:49.676361Z","iopub.execute_input":"2022-10-30T11:37:49.677528Z","iopub.status.idle":"2022-10-30T11:37:52.659471Z","shell.execute_reply.started":"2022-10-30T11:37:49.677466Z","shell.execute_reply":"2022-10-30T11:37:52.658235Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"view_random_images(train_dir, 'Other' , num_images=5)\nview_random_images(train_dir, 'Other' , num_images=5)","metadata":{"execution":{"iopub.status.busy":"2022-10-30T11:37:52.662436Z","iopub.execute_input":"2022-10-30T11:37:52.663155Z","iopub.status.idle":"2022-10-30T11:37:55.266470Z","shell.execute_reply.started":"2022-10-30T11:37:52.663116Z","shell.execute_reply":"2022-10-30T11:37:55.265356Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Building a **model**","metadata":{}},{"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator ","metadata":{"execution":{"iopub.status.busy":"2022-10-30T11:59:40.495537Z","iopub.execute_input":"2022-10-30T11:59:40.496000Z","iopub.status.idle":"2022-10-30T11:59:40.501787Z","shell.execute_reply.started":"2022-10-30T11:59:40.495962Z","shell.execute_reply":"2022-10-30T11:59:40.500465Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## image datagen ..\ndatagen = ImageDataGenerator(rescale=1./255,\n                                   horizontal_flip=True,\n                                   validation_split=0.25,\n                            ) ","metadata":{"execution":{"iopub.status.busy":"2022-10-30T11:59:48.419259Z","iopub.execute_input":"2022-10-30T11:59:48.419687Z","iopub.status.idle":"2022-10-30T11:59:48.425184Z","shell.execute_reply.started":"2022-10-30T11:59:48.419653Z","shell.execute_reply":"2022-10-30T11:59:48.424316Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# train data\ntrain_data = datagen.flow_from_directory(train_dir,\n                                           batch_size = 32, \n                                           target_size=(224, 224),\n                                           class_mode=\"categorical\",\n                                           subset='training',\n                                           seed=42\n                                         )\n","metadata":{"execution":{"iopub.status.busy":"2022-10-30T11:59:56.587028Z","iopub.execute_input":"2022-10-30T11:59:56.587487Z","iopub.status.idle":"2022-10-30T11:59:58.081366Z","shell.execute_reply.started":"2022-10-30T11:59:56.587454Z","shell.execute_reply":"2022-10-30T11:59:58.080091Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# validation data\nvalid_data = datagen.flow_from_directory( train_dir,\n                                           target_size=(224, 224),\n                                            batch_size= 32,\n                                            class_mode='categorical',\n                                            subset='validation',\n                                            seed=42\n                                        )","metadata":{"execution":{"iopub.status.busy":"2022-10-30T12:01:22.769512Z","iopub.execute_input":"2022-10-30T12:01:22.770048Z","iopub.status.idle":"2022-10-30T12:01:24.116705Z","shell.execute_reply.started":"2022-10-30T12:01:22.770003Z","shell.execute_reply":"2022-10-30T12:01:24.115643Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_5 = tf.keras.models.Sequential([\n    tf.keras.layers.Conv2D(10, 3, activation='relu', input_shape=(224, 224, 3)), \n    tf.keras.layers.MaxPool2D(pool_size=(2, 2), strides=1, padding='valid'),\n    tf.keras.layers.Conv2D(10, 3, activation='relu'),\n    tf.keras.layers.MaxPool2D(),\n    tf.keras.layers.Conv2D(10, 3, activation='relu'),\n    tf.keras.layers.MaxPool2D(),\n    tf.keras.layers.Flatten(),\n    tf.keras.layers.Dense(5, activation='softmax')\n])","metadata":{"execution":{"iopub.status.busy":"2022-10-30T12:10:33.047276Z","iopub.execute_input":"2022-10-30T12:10:33.047757Z","iopub.status.idle":"2022-10-30T12:10:33.112130Z","shell.execute_reply.started":"2022-10-30T12:10:33.047711Z","shell.execute_reply":"2022-10-30T12:10:33.110902Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_5.summary()","metadata":{"execution":{"iopub.status.busy":"2022-10-30T12:10:36.453522Z","iopub.execute_input":"2022-10-30T12:10:36.454281Z","iopub.status.idle":"2022-10-30T12:10:36.461888Z","shell.execute_reply.started":"2022-10-30T12:10:36.454241Z","shell.execute_reply":"2022-10-30T12:10:36.460483Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# compile the model\nmodel_5.compile(loss=tf.keras.losses.categorical_crossentropy,\n               optimizer=tf.keras.optimizers.Adam(),\n               metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2022-10-30T12:10:42.879185Z","iopub.execute_input":"2022-10-30T12:10:42.879709Z","iopub.status.idle":"2022-10-30T12:10:42.893715Z","shell.execute_reply.started":"2022-10-30T12:10:42.879668Z","shell.execute_reply":"2022-10-30T12:10:42.892511Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(train_data)","metadata":{"execution":{"iopub.status.busy":"2022-10-30T12:08:30.538547Z","iopub.execute_input":"2022-10-30T12:08:30.539017Z","iopub.status.idle":"2022-10-30T12:08:30.546614Z","shell.execute_reply.started":"2022-10-30T12:08:30.538979Z","shell.execute_reply":"2022-10-30T12:08:30.545652Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history_5 = model_5.fit(train_data, \n                        epochs=5, \n                        steps_per_epoch=len(train_data), \n                        validation_data=valid_data, \n                        validation_batch_size=len(valid_data))","metadata":{"execution":{"iopub.status.busy":"2022-10-30T12:10:46.938031Z","iopub.execute_input":"2022-10-30T12:10:46.938582Z","iopub.status.idle":"2022-10-30T12:25:18.488932Z","shell.execute_reply.started":"2022-10-30T12:10:46.938519Z","shell.execute_reply":"2022-10-30T12:25:18.487829Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(10,4), tight_layout = True)\nplt.subplot(1, 2, 1)\nplt.plot(history_5.history['loss'], label='training_loss')\nplt.plot(history_5.history['val_loss'], label='validation_loss')\nplt.xlabel('epoch')\nplt.title('loss plots')\nplt.legend()\n\nplt.subplot(1, 2, 2)\nplt.plot(history_5.history['accuracy'], label='training_accuracy')\nplt.plot(history_5.history['val_accuracy'], label='val_accuracy')\nplt.title('accuracy plots')\nplt.xlabel('epoch')\nplt.legend()","metadata":{"execution":{"iopub.status.busy":"2022-10-30T12:26:31.108105Z","iopub.execute_input":"2022-10-30T12:26:31.108502Z","iopub.status.idle":"2022-10-30T12:26:31.624978Z","shell.execute_reply.started":"2022-10-30T12:26:31.108471Z","shell.execute_reply":"2022-10-30T12:26:31.623848Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**ABOVE SEEMS OVERFITTEND MODEL**","metadata":{}},{"cell_type":"code","source":"import tensorflow as tf\nimport pandas as pd\nimport matplotlib.pyplot as plt\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator ","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:34:43.482003Z","iopub.execute_input":"2022-10-30T16:34:43.482480Z","iopub.status.idle":"2022-10-30T16:34:50.584009Z","shell.execute_reply.started":"2022-10-30T16:34:43.482385Z","shell.execute_reply":"2022-10-30T16:34:50.582789Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ntrain_dir = '/kaggle/input/deep-learning-sszg529-bits-pilani/train_data/train_data/'\n\n## image datagen ..\ndatagen = ImageDataGenerator(rescale=1./255,\n                                   horizontal_flip=True,\n                                   validation_split=0.25,\n                            )\n# train data\ntrain_data = datagen.flow_from_directory(train_dir,\n                                           batch_size = 32, \n                                           target_size=(224, 224),\n                                           class_mode=\"categorical\",\n                                           subset='training',\n                                           seed=42\n                                         )\n                             \n# validation data\nvalid_data = datagen.flow_from_directory( train_dir,\n                                           target_size=(224, 224),\n                                            batch_size= 32,\n                                            class_mode='categorical',\n                                            subset='validation',\n                                            seed=42\n                                        )","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:34:54.121405Z","iopub.execute_input":"2022-10-30T16:34:54.122139Z","iopub.status.idle":"2022-10-30T16:34:56.682138Z","shell.execute_reply.started":"2022-10-30T16:34:54.122100Z","shell.execute_reply":"2022-10-30T16:34:56.681157Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nmodel_6 = tf.keras.models.Sequential([\n    tf.keras.layers.Conv2D(10, 3, activation='relu', input_shape=(224, 224, 3)), \n    tf.keras.layers.MaxPool2D(pool_size=(2, 2), strides=1, padding='valid'),\n    tf.keras.layers.Conv2D(10, 3, activation='relu'),\n    tf.keras.layers.Dropout(0.25),\n    tf.keras.layers.MaxPool2D(),\n    tf.keras.layers.Conv2D(10, 3, activation='relu'),\n    tf.keras.layers.Dropout(0.25),\n    tf.keras.layers.MaxPool2D(),\n    tf.keras.layers.Conv2D(10, 3, activation='relu'),\n    tf.keras.layers.Dropout(0.25),\n    tf.keras.layers.MaxPool2D(),\n    tf.keras.layers.Flatten(),\n    tf.keras.layers.Dense(5, activation='softmax')\n])\n\n\n# compile the model\nmodel_6.compile(loss=tf.keras.losses.categorical_crossentropy,\n               optimizer=tf.keras.optimizers.Adam(),\n               metrics=['accuracy'])\n\nhistory_6 = model_6.fit(train_data, \n                        epochs=10, \n                        steps_per_epoch=len(train_data), \n                        validation_data=valid_data, \n                        validation_batch_size=len(valid_data))","metadata":{"execution":{"iopub.status.busy":"2022-10-30T16:36:18.973465Z","iopub.execute_input":"2022-10-30T16:36:18.974483Z","iopub.status.idle":"2022-10-30T17:07:03.039311Z","shell.execute_reply.started":"2022-10-30T16:36:18.974432Z","shell.execute_reply":"2022-10-30T17:07:03.037804Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_6.save('model_6')","metadata":{"execution":{"iopub.status.busy":"2022-10-30T17:07:25.335496Z","iopub.execute_input":"2022-10-30T17:07:25.337138Z","iopub.status.idle":"2022-10-30T17:07:27.236911Z","shell.execute_reply.started":"2022-10-30T17:07:25.337090Z","shell.execute_reply":"2022-10-30T17:07:27.235725Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(10,4), tight_layout = True)\nplt.subplot(1, 2, 1)\nplt.plot(history_6.history['loss'], label='training_loss')\nplt.plot(history_6.history['val_loss'], label='validation_loss')\nplt.xlabel('epoch')\nplt.title('loss plots')\nplt.legend()\n\nplt.subplot(1, 2, 2)\nplt.plot(history_6.history['accuracy'], label='training_accuracy')\nplt.plot(history_6.history['val_accuracy'], label='val_accuracy')\nplt.title('accuracy plots')\nplt.xlabel('epoch')\nplt.legend()","metadata":{"execution":{"iopub.status.busy":"2022-10-30T17:07:53.675022Z","iopub.execute_input":"2022-10-30T17:07:53.675444Z","iopub.status.idle":"2022-10-30T17:07:54.225530Z","shell.execute_reply.started":"2022-10-30T17:07:53.675410Z","shell.execute_reply":"2022-10-30T17:07:54.224075Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.models import load_model\nmodel = load_model('model_6')","metadata":{"execution":{"iopub.status.busy":"2022-10-30T17:08:07.179087Z","iopub.execute_input":"2022-10-30T17:08:07.180285Z","iopub.status.idle":"2022-10-30T17:08:07.796023Z","shell.execute_reply.started":"2022-10-30T17:08:07.180239Z","shell.execute_reply":"2022-10-30T17:08:07.794807Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import csv\nimport numpy as np\nimport pandas as pd\nfrom tensorflow.keras.preprocessing import image\n\n#Testing a file.\n\nresults = pd.DataFrame(columns=['id', 'Class'])\ncategory=[3,4,1,2,5]\nwith open(\"../input/deep-learning-sszg529-bits-pilani/test.csv\", 'r') as csvfile:\n    datareader = csv.reader(csvfile)\n    \n    next(datareader)\n    \n    for row in datareader:\n        print(row[1])\n        file=\"../input/deep-learning-sszg529-bits-pilani/test_data/test_data/\"+row[1]\n        true_image = image.load_img(file)\n        img = image.load_img(file, color_mode=\"rgb\", target_size=(224, 224))\n        x = image.img_to_array(img)\n        x = np.expand_dims(x, axis = 0)\n\n        x /= 255\n        result = model.predict(x)\n        results = results.append({\"id\":row[0],'Class':category[np.argmax(result)]}, ignore_index=True)\n       \n    results.to_csv('submission.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2022-10-30T17:09:20.532497Z","iopub.execute_input":"2022-10-30T17:09:20.532958Z","iopub.status.idle":"2022-10-30T17:12:52.924151Z","shell.execute_reply.started":"2022-10-30T17:09:20.532922Z","shell.execute_reply":"2022-10-30T17:12:52.922933Z"},"trusted":true},"execution_count":null,"outputs":[]}]}