|
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) |