{"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":"markdown","source":"# **Cassava Leaf Disease Classification:** \n# **CNN Keras Baseline Prediction**\n![Cassava](https://scx2.b-cdn.net/gfx/news/2019/3-geneeditingt.jpg)\n\n\n## The first part of this notebook: [Cassava Leaf Disease: CNN Keras Baseline](https://www.kaggle.com/maksymshkliarevskyi/cassava-leaf-disease-keras-cnn-baseline)\n\n## See also the last part of this work with my best CNN: [Cassava Leaf Disease: Best Keras CNN](https://www.kaggle.com/maksymshkliarevskyi/cassava-leaf-disease-best-keras-cnn)","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport datetime\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import accuracy_score\nimport tensorflow as tf\nfrom tensorflow.keras import models, layers\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom keras.callbacks import ModelCheckpoint, EarlyStopping, ReduceLROnPlateau\nfrom tensorflow.keras.applications import ResNet50, DenseNet121, EfficientNetB0\nfrom keras.optimizers import Adam\nfrom keras.models import Sequential\nfrom keras.layers import BatchNormalization\nfrom keras.layers.convolutional import Conv2D\nfrom keras.layers.convolutional import MaxPooling2D\nfrom keras.layers.core import Activation, Flatten, Dropout, Dense\n\n# ignoring warnings\nimport warnings\nwarnings.simplefilter(\"ignore\")\n\nimport os, cv2, json\nfrom PIL import Image","metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","execution":{"iopub.status.busy":"2022-03-24T04:13:26.444082Z","iopub.execute_input":"2022-03-24T04:13:26.444677Z","iopub.status.idle":"2022-03-24T04:13:35.260099Z","shell.execute_reply.started":"2022-03-24T04:13:26.444633Z","shell.execute_reply":"2022-03-24T04:13:35.258232Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"TARGET_SIZE = 224\n\nWORK_DIR = '../input/cassava-leaf-disease-classification'\nos.listdir(WORK_DIR)","metadata":{"execution":{"iopub.status.busy":"2022-03-24T04:13:35.262185Z","iopub.execute_input":"2022-03-24T04:13:35.262531Z","iopub.status.idle":"2022-03-24T04:13:35.273391Z","shell.execute_reply.started":"2022-03-24T04:13:35.262499Z","shell.execute_reply":"2022-03-24T04:13:35.272337Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def create_model():\n    model = models.Sequential()\n    model.add(Conv2D(64, (3, 3), activation='relu', input_shape=(TARGET_SIZE, TARGET_SIZE, 3)))\n    model.add(MaxPooling2D(3, 3))\n    model.add(Conv2D(64, (3, 3), activation='relu'))\n    model.add(MaxPooling2D(3, 3))\n    model.add(Conv2D(128, (3, 3), activation='relu'))\n    model.add(MaxPooling2D(3, 3))\n    model.add(Conv2D(128, (3, 3), activation='relu'))\n    model.add(MaxPooling2D(3, 3))\n    model.add(Flatten())\n    model.add(Dropout(0.5))\n    model.add(Dense(512, activation='relu'))\n    model.add(Dense(5, activation='softmax'))\n    model.compile(optimizer = Adam(lr = 0.001),\n                  loss = \"sparse_categorical_crossentropy\",\n                  metrics = [\"acc\"])\n    \n    return model\n\nmodel = create_model()\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2022-03-24T04:13:35.274841Z","iopub.execute_input":"2022-03-24T04:13:35.275168Z","iopub.status.idle":"2022-03-24T04:13:35.539237Z","shell.execute_reply.started":"2022-03-24T04:13:35.275136Z","shell.execute_reply":"2022-03-24T04:13:35.536928Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.load_weights(\"../input/cassava-baseline-model/baseline_model.h5\")\n","metadata":{"execution":{"iopub.status.busy":"2022-03-24T04:14:45.64288Z","iopub.execute_input":"2022-03-24T04:14:45.643401Z","iopub.status.idle":"2022-03-24T04:14:45.77901Z","shell.execute_reply.started":"2022-03-24T04:14:45.643375Z","shell.execute_reply":"2022-03-24T04:14:45.777698Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Prediction","metadata":{}},{"cell_type":"code","source":"ss = pd.read_csv(os.path.join(WORK_DIR, \"sample_submission.csv\"))\nss","metadata":{"execution":{"iopub.status.busy":"2022-03-24T04:13:35.824185Z","iopub.status.idle":"2022-03-24T04:13:35.824699Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds = []\n\nfor image_id in ss.image_id:\n    image = Image.open(os.path.join(WORK_DIR,  \"test_images\", image_id))\n    image = image.resize((TARGET_SIZE, TARGET_SIZE))\n    image = np.expand_dims(image, axis = 0)\n    preds.append(np.argmax(model.predict(image)))\n\nss['label'] = preds\nss","metadata":{"execution":{"iopub.status.busy":"2022-03-24T04:13:35.825851Z","iopub.status.idle":"2022-03-24T04:13:35.826376Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ss.to_csv('submission.csv', index = False)","metadata":{"execution":{"iopub.status.busy":"2022-03-24T04:13:35.827381Z","iopub.status.idle":"2022-03-24T04:13:35.827846Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## SEE THE [FIRST PART OF THIS NOTEBOOK](https://www.kaggle.com/maksymshkliarevskyi/cassava-leaf-disease-keras-cnn-baseline)","metadata":{}}]}