{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"scrolled":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport json\nimport tensorflow as tf\nimport os\nfrom keras.preprocessing import image\n\ndf = pd.read_csv('/kaggle/input/cassava-leaf-disease-classification/train.csv')\n[os.mkdir(os.path.join('/kaggle/working', \"label_\" + str(x))) for x in df.label.unique()]\n\nfrom shutil import copyfile\n\nfor a,b in df.iterrows():\n    src = os.path.join('/kaggle/input/cassava-leaf-disease-classification/train_images',b.image_id)\n    dst = os.path.join('/kaggle/working', \"label_\" + str(b.label), b.image_id)\n    copyfile(src, dst)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"scrolled":true},"cell_type":"code","source":"model = tf.keras.models.Sequential([\n    tf.keras.layers.Conv2D(16, (3,3), activation='relu', input_shape=(150, 150, 3)),\n    tf.keras.layers.MaxPooling2D(2, 2),\n    tf.keras.layers.Conv2D(32, (3,3), activation='relu'),\n    tf.keras.layers.MaxPooling2D(2,2),\n    tf.keras.layers.Conv2D(64, (3,3), activation='relu'),\n    tf.keras.layers.MaxPooling2D(2,2),\n    tf.keras.layers.Conv2D(64, (3,3), activation='relu'),\n    tf.keras.layers.MaxPooling2D(2,2),\n    tf.keras.layers.Conv2D(64, (3,3), activation='relu'),\n    tf.keras.layers.MaxPooling2D(2,2),\n    tf.keras.layers.Flatten(),\n    tf.keras.layers.Dense(512, activation='relu'),\n    tf.keras.layers.Dense(5, activation='softmax')\n])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"scrolled":true},"cell_type":"code","source":"from tensorflow.keras.optimizers import RMSprop\n\nmodel.compile(loss='categorical_crossentropy',\n              optimizer='adam',\n              metrics=['acc'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"scrolled":true},"cell_type":"code","source":"import os\nimport tensorflow as tf\nfrom keras_preprocessing.image import ImageDataGenerator\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\n\ntrain_data_dir = '/kaggle/working/'\nimg_height = 150\nimg_width = 150\nbatch_size = 32\nnum_classes = 5\n\ntrain_datagen = ImageDataGenerator(rescale=1./255,\n    shear_range=0.2,\n    zoom_range=0.3,\n    rotation_range=40,\n    horizontal_flip=True,\n    validation_split=0.2) # set validation split\n\ntrain_generator = train_datagen.flow_from_directory(\n    train_data_dir,\n    target_size=(img_height, img_width),\n    batch_size=batch_size,\n    class_mode='categorical',\n    subset='training') # set as training data\n\nvalidation_generator = train_datagen.flow_from_directory(\n    train_data_dir, # same directory as training data\n    target_size=(img_height, img_width),\n    batch_size=batch_size,\n    class_mode='categorical',\n    subset='validation') # set as validation data\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"scrolled":true},"cell_type":"code","source":"model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"scrolled":true},"cell_type":"code","source":"history = model.fit(train_generator, epochs=1, validation_data = validation_generator, verbose = 1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"scrolled":true},"cell_type":"code","source":"model.save('standard.model')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_path = '../input/cassava-leaf-disease-classification/test_images/'\ntest_csv = '../input/cassava-leaf-disease-classification/sample_submission.csv'\nsubmission = pd.read_csv(test_csv)\n\ntest_images = []\ntest_image_names = []\n\nfor img in submission['image_id']:\n    test_image_names.append(img)\n    img = image.load_img(os.path.join(test_path, img), target_size=(150,150))\n    x = image.img_to_array(img)\n    x = np.expand_dims(x, axis=0)\n    test_images.append(x)\n\n#for i in os.listdir(test_path):\n#    test_image_names.append(i)\n#    img = image.load_img(os.path.join(test_path, i), target_size=(150,150))\n#    x = image.img_to_array(img)\n#    x = np.expand_dims(x, axis=0)\n#    test_images.append(x)\n\n#images = np.vstack([test_images])\nclasses = model.predict_classes(test_images, batch_size=10)\nprint(classes)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#sub = pd.DataFrame()\n#sub = pd.concat([pd.Series(test_image_names), pd.Series(classes)], axis=1) \n#sub.columns = ['image_id', 'label']\nsubmission['label'] = classes\nsubmission.to_csv('submission.csv', index = False)\nsubmission.to_csv('/kaggle/working/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}