{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import zipfile\nimport PIL\nimport os\nimport matplotlib.pyplot as plt\nimport json\nimport csv\nimport tensorflow as tf\nimport shutil\nimport pandas as pd\nimport numpy as np","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"%rm -rf ./train_images\nshutil.copytree(\"../input/cassava-leaf-disease-classification/train_images\",\"./train_images\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_img_path = \"./train_images/\"\ntrain_img_list = os.listdir(train_img_path)\nPIL.Image.open(train_img_path+train_img_list[10])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_dict={}\nwith open(\"../input/cassava-leaf-disease-classification/train.csv\") as file:\n  reader = csv.reader(file,skipinitialspace=True)\n  next(reader)\n  for row in reader:\n    train_dict[row[0]] = row[1]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"for i in range(5):\n  path = train_img_path+str(i)\n  if os.path.isdir(path) != True:\n    os.mkdir(path)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"for name in train_img_list:\n  path = train_img_path+name\n  if os.path.isdir(path) != True:\n    final_path = train_img_path+train_dict[name]\n    shutil.move(path,final_path)\nos.listdir(train_img_path)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"height,width = 300,300\nbatch_size=32\nSTEPS_PER_EPOCH = len(train_img_list)*0.8 / batch_size\nVALIDATION_STEPS = len(train_img_list)*0.2 / batch_size\ntrain_datagen = tf.keras.preprocessing.image.ImageDataGenerator(\n        rescale=1./255,\n        shear_range=0.2,\n        zoom_range=0.2,\n        horizontal_flip=True,\n        vertical_flip=True,\n        validation_split = 0.2,\n        rotation_range=25,\n        fill_mode=\"nearest\",\n        height_shift_range = 0.15,\n        width_shift_range = 0.15,\n)\n\ntrain_generator = train_datagen.flow_from_directory(\n    \"./train_images\",\n    target_size = (height,width),\n    batch_size=batch_size,\n    class_mode = \"sparse\",\n    shuffle = True,\n    subset = \"training\"\n)\n\n\nvalidation_generator = train_datagen.flow_from_directory(\n    \"./train_images\",\n    target_size = (height,width),\n    batch_size=batch_size,\n    class_mode = \"sparse\",\n    shuffle = True,\n    subset = \"validation\"\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"epochs = 15\ntotal_train = len(os.listdir(\"../input/cassava-leaf-disease-classification/train_images\"))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Sequential([\n    Conv2D(16, 3, padding='same', activation='relu', input_shape=(height, width ,3)),\n    MaxPooling2D(),\n    Conv2D(32, 3, padding='same', activation='relu'),\n    MaxPooling2D(),\n    Conv2D(64, 3, padding='same', activation='relu'),\n    MaxPooling2D(),\n    Flatten(),\n    Dense(512, activation='relu'),\n    Dense(1, activation='sigmoid')\n])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(optimizer='adam',\n              loss='binary_crossentropy',\n              metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model.fit_generator(\n    train_generator,\n    steps_per_epoch=total_train // batch_size,\n    epochs=epochs,\n    validation_data=validation_generator,\n    validation_steps=total_train*0.2 // batch_size\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","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}