| 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) |
|
|
| test_generator = ImageDataGenerator(preprocessing_function=preprocess_input) |
|
|
|
|
|
|
|
|
|
|
| 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))[:] |
|
|
| 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) |