import os from keras.models import Model from tensorflow.keras.optimizers import Adam from keras.applications.vgg16 import VGG16, preprocess_input from keras.preprocessing.image import ImageDataGenerator from keras.callbacks import ModelCheckpoint, EarlyStopping from keras.layers import Dense, Dropout, Flatten from pathlib import Path import numpy as np BATCH_SIZE = 64 train_generator = ImageDataGenerator(rotation_range=90, brightness_range=[0.1, 0.7], width_shift_range=0.5, height_shift_range=0.5, horizontal_flip=True, vertical_flip=True, validation_split=0.15, preprocessing_function=preprocess_input) # VGG16 preprocessing test_generator = ImageDataGenerator(preprocessing_function=preprocess_input) # VGG16 preprocessing train_data_dir = '/kaggle/input/pic-a-plant2/DBa4/‏‏DBa/train' test_data_dir = '/kaggle/input/pic-a-plant2/DBa4/‏‏DBa/test' class_subset = sorted(os.listdir(train_data_dir))[:] # Using only the first 10 classes traingen = train_generator.flow_from_directory(train_data_dir, target_size=(150, 150), class_mode='categorical', classes=class_subset, subset='training', batch_size=BATCH_SIZE, shuffle=True, seed=42) validgen = train_generator.flow_from_directory(train_data_dir, target_size=(150, 150), class_mode='categorical', classes=class_subset, subset='validation', batch_size=BATCH_SIZE, shuffle=True, seed=42) testgen = test_generator.flow_from_directory(test_data_dir, target_size=(150, 150), class_mode=None, classes=class_subset, batch_size=1, shuffle=False, seed=42)