{"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":"path = '../input/plant-pathology-2021-fgvc8/'\ntrain_dir = path + 'train_images/'\ntest_dir = path + 'test_images/'","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\ndf = pd.read_csv(\"../input/plant-pathology-2021-fgvc8/train.csv\", dtype=str)\ndf.labels.value_counts()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df['labels'] = df['labels'].astype(str)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.preprocessing.image import ImageDataGenerator\n\ntrain_datagen  = ImageDataGenerator(rescale = 1./255,\n                                   validation_split = 0.3)\n\ntest_datagen = ImageDataGenerator(rescale = 1./255,\n                                 validation_split = 0.3)\n\ntrain_generator = train_datagen.flow_from_dataframe(dataframe = df,\n                                                   directory = train_dir,\n                                                   target_size = (150,150),\n                                                   x_col = 'image',\n                                                   y_col = 'labels',\n                                                   batch_size = 256,\n                                                   color_mode = 'rgb',\n                                                   class_mode = 'categorical',\n                                                   subset = 'training')\n\ntest_generator = test_datagen.flow_from_dataframe(dataframe = df,\n                                                 directory = train_dir,\n                                                 target_size = (150,150),\n                                                 x_col = 'image',\n                                                 y_col = 'labels',\n                                                 batch_size = 256,\n                                                 color_mode = 'rgb',\n                                                 class_mode = 'categorical',\n                                                 subset = 'validation')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras import models\nfrom keras import layers\nfrom keras import optimizers\n\nmodel = models.Sequential()\n\nmodel.add(layers.Conv2D(64, (3,3), activation = 'relu', input_shape = (150,150,3)))\nmodel.add(layers.MaxPooling2D((2,2)))\n\nmodel.add(layers.Conv2D(64, (3,3), activation = 'relu'))\nmodel.add(layers.MaxPooling2D((2,2)))\n\nmodel.add(layers.Conv2D(128, (3,3), activation = 'relu', input_shape = (150,150,3)))\nmodel.add(layers.MaxPooling2D((2,2)))\n\n\nmodel.add(layers.Conv2D(256, (3,3), activation = 'relu', input_shape = (150,150,3)))\nmodel.add(layers.MaxPooling2D((2,2)))\n\nmodel.add(layers.Flatten())\nmodel.add(layers.Dropout(0.5))\nmodel.add(layers.Dense(512, activation='relu'))\nmodel.add(layers.Dense(12, activation = 'softmax'))\n\noptimizer = optimizers.Adam(lr = 0.001)\n\nmodel.compile(loss='categorical_crossentropy',\n            optimizer=optimizer,\n            metrics=['accuracy'])\nmodel.summary()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(train_generator, epochs = 10, validation_data = test_generator)","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}