{"cells":[{"metadata":{"_uuid":"4c7da25a-f41a-4026-9079-cd161b03e5e4","_cell_guid":"118d952f-b3ff-4408-82ae-203c358a9f07","trusted":true},"cell_type":"markdown","source":"_Hello and welcome to my notebook!_"},{"metadata":{"_uuid":"62994152-78da-41c1-a2ba-ce80998b361a","_cell_guid":"1f3bd187-e95d-43aa-9990-5fb3e731fac6","trusted":true},"cell_type":"markdown","source":"## What can you find in this notebook\n- a CNN classifier using TensorFlow and jpeg files"},{"metadata":{"_uuid":"93980a21-6089-4e06-839a-2d18e84f09d8","_cell_guid":"ff4caf64-92be-4684-8515-48b5bdd04169","trusted":true},"cell_type":"markdown","source":"![](data:image/jpeg;base64,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)"},{"metadata":{"_uuid":"55404bdb-9782-46bb-ad33-ff69b01fa76e","_cell_guid":"06561ae3-782a-458d-a5f7-102df27b5f40","trusted":true},"cell_type":"markdown","source":"## Let's build our simple CNN classifier"},{"metadata":{"_uuid":"07891abc-270f-4f41-a033-d4e3b70d9ea0","_cell_guid":"1692c10d-b0a4-4c7b-a341-a45ca04cee60","trusted":true},"cell_type":"code","source":"# importing libraries used for our model\nimport os\nimport random\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mpimg\nimport json","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"43e3ab94-86b6-418f-b43c-65362a533d33","_cell_guid":"5d738907-a723-47be-8897-c8e7cae880bb","trusted":true},"cell_type":"code","source":"import shutil\n\ny_train = pd.read_csv('../input/cassava-leaf-disease-classification/train.csv')\n\n# creating subfolder for train images\nold_train_img_path = '../input/cassava-leaf-disease-classification/train_images'\nnew_train_img_path = './'\nshutil.os.mkdir(new_train_img_path + 'train')\nshutil.os.mkdir(new_train_img_path + 'train/0')\nshutil.os.mkdir(new_train_img_path + 'train/1')\nshutil.os.mkdir(new_train_img_path + 'train/2')\nshutil.os.mkdir(new_train_img_path + 'train/3')\nshutil.os.mkdir(new_train_img_path + 'train/4')\nnew_train_img_path = new_train_img_path + 'train'\n\ni = 0\n# moving files into appropiate subfolders\nfor name in os.listdir(old_train_img_path):\n    shutil.copy(old_train_img_path + '/' + name, new_train_img_path + '/' + str(y_train.values[i][1]) + '/' + name)\n    i += 1","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"4456e1b3-2bc1-4d9c-92f4-3d5d229f45c8","_cell_guid":"45deedde-f9fa-4942-a452-6b17f267855c","trusted":true},"cell_type":"code","source":"from tensorflow.keras.preprocessing.image import ImageDataGenerator\n\ntrain_datagen = ImageDataGenerator(rescale = 1./255,\n                                   rotation_range = 90,\n                                   horizontal_flip = True,\n                                   vertical_flip = True)\n\nx_train = train_datagen.flow_from_directory(directory = new_train_img_path,\n                                            target_size = (256, 256),\n                                            batch_size = 64)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"a594f8c9-1aaf-4263-b8a8-6cd1b32d4c04","_cell_guid":"3530a3f1-5843-466e-8bd0-062ef9cb9366","trusted":true},"cell_type":"code","source":"import tensorflow as tf\n\ngpus = tf.config.experimental.list_physical_devices('GPU')\nprint(gpus)\ntf.debugging.set_log_device_placement(True)\n\ndevice_name = tf.test.gpu_device_name()\nif \"GPU\" not in device_name:\n    print(\"GPU device not found\")\nprint('Found GPU at: {}'.format(device_name))\n\nif gpus:\n    !pip install tensorflow-gpu\n    !nvidia-smi","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"e052586d-4969-46bf-a4d9-a19bbc513aa1","_cell_guid":"d450371a-dc5c-43ac-a86c-cac2c473f62e","trusted":true},"cell_type":"code","source":"train_tfrecords_path = '../input/cassava-leaf-disease-classification/train_tfrecords'\n\n# -- TAKEN FROM TENSORFLOW DOCUMENTATION --\nfilenames = os.listdir(train_tfrecords_path)\nraw_dataset = tf.data.TFRecordDataset(filenames)\nraw_dataset\nraw_dataset.take(5)\n\nfeature_description = {\n            \"image\": tf.io.FixedLenFeature([], tf.string)\n        }\n\ndef _parse_function(example_proto):\n  # Parse the input `tf.train.Example` proto using the dictionary above.\n  return tf.io.parse_single_example(example_proto, feature_description)\n\nparsed_dataset = raw_dataset.map(_parse_function)\nparsed_dataset\nparsed_dataset.take(5)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"6e8148dc-b354-4d13-b72a-e1196e59dfff","_cell_guid":"69c80d4a-c3ad-4df8-a433-e6ad35383e1f","trusted":true},"cell_type":"code","source":"from tensorflow.keras.optimizers import RMSprop\n\ncallbacks_used = [\n    tf.keras.callbacks.EarlyStopping(monitor = 'accuracy'),\n    tf.keras.callbacks.ReduceLROnPlateau(monitor='accuracy', factor=0.01),\n]\n\nif gpus:\n    try:\n        with tf.device(device_name):\n            classifier = tf.keras.Sequential([\n                tf.keras.layers.Conv2D(32, (3, 3), activation = 'relu', input_shape = (256, 256, 3)),\n                tf.keras.layers.MaxPool2D(2, 2),\n                tf.keras.layers.Dropout(0.3),\n                tf.keras.layers.Conv2D(32, (3, 3), activation = 'relu'),\n                tf.keras.layers.MaxPool2D(2, 2),\n                tf.keras.layers.Dropout(0.3),\n                tf.keras.layers.Conv2D(32, (3, 3), activation = 'relu'),\n                tf.keras.layers.MaxPool2D(2, 2),\n                tf.keras.layers.Flatten(),\n                tf.keras.layers.Dense(units = 128, activation = 'relu'),\n                tf.keras.layers.Dense(units = 5, activation = 'softmax')\n                ])\n\n            classifier.compile(optimizer = RMSprop(lr = 0.01),\n                          loss = 'categorical_crossentropy',\n                          metrics = ['accuracy'])\n\n            classifier.summary()\n\n            classifier.fit(x = x_train, epochs = 5,\n                          callbacks = callbacks_used)\n    except RuntimeError as e:\n      print(e)\nelse:\n    classifier = tf.keras.Sequential([\n        tf.keras.layers.Conv2D(32, (3, 3), activation = 'relu', input_shape = (256, 256, 3)),\n        tf.keras.layers.MaxPool2D(2, 2),\n        tf.keras.layers.Dropout(0.3),\n        tf.keras.layers.Conv2D(32, (3, 3), activation = 'relu'),\n        tf.keras.layers.MaxPool2D(2, 2),\n        tf.keras.layers.Dropout(0.3),\n        tf.keras.layers.Conv2D(32, (3, 3), activation = 'relu'),\n        tf.keras.layers.MaxPool2D(2, 2),\n        tf.keras.layers.Flatten(),\n        tf.keras.layers.Dense(units = 128, activation = 'relu'),\n        tf.keras.layers.Dense(units = 5, activation = 'softmax')\n        ])\n\n    classifier.compile(optimizer = RMSprop(lr = 0.01),\n                  loss = 'categorical_crossentropy',\n                  metrics = ['accuracy'])\n\n    classifier.summary()\n\n    classifier.fit(x = x_train, epochs = 5,\n                  callbacks = callbacks_used)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"67a5b771-6fc1-4f8e-a0ee-2e412547d582","_cell_guid":"30452986-641b-4798-b3e2-de6c9c10478a","trusted":true},"cell_type":"code","source":"old_test_img_path = '../input/cassava-leaf-disease-classification/test_images'\nnew_test_img_path = './'\nshutil.os.mkdir(new_test_img_path + 'test')\nshutil.os.mkdir(new_test_img_path + 'test/subfolder')\n\nfor name in os.listdir(old_test_img_path):\n    shutil.copy(old_test_img_path + '/' + name, new_test_img_path + '/test/subfolder')\n    \ntest_datagen = ImageDataGenerator(rescale = 1./255,\n                                   rotation_range = 67.5,\n                                   horizontal_flip = True)\n\nx_test = test_datagen.flow_from_directory(directory = new_test_img_path + '/test',\n                                            target_size = (256, 256),\n                                            class_mode = None)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"ae036e5d-b048-418c-80a9-e385a42d6b60","_cell_guid":"067cf586-2cf1-447b-b6f4-242e86c1a9af","trusted":true},"cell_type":"code","source":"predictions = pd.DataFrame(columns = {'image_id', 'label'})\npredictions[\"image_id\"] = os.listdir(test_img_path)\npredictions[\"label\"] = classifier.predict(x_test)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"ec373f90-a7b6-4fe4-bba1-60f78a870303","_cell_guid":"9153575c-cb2e-4d6e-9abf-f80ba284b35e","trusted":true},"cell_type":"code","source":"predictions.head()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"3433541b-f06a-4943-9a03-74ad8a263953","_cell_guid":"09f43df5-8614-4d06-bae0-58e9b236e427","trusted":true},"cell_type":"code","source":"predictions.to_csv(\"submission.csv\", index = False)","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}