import tensorflow as tf import os import pathlib import numpy as np data_dir = pathlib.Path("/Users/rosh/Downloads/Train_data") class_names = np.array(sorted([item.name for item in data_dir.glob("*")])) class_names = list(class_names) import matplotlib.pyplot as plt import matplotlib.image as mpimg import random # def view_random_image(target_dir, target_class): # # target_folder = target_dir + "/" + target_class # # random_image = random.sample(os.listdir(target_folder), 1) # # img = mpimg.imread(target_folder + "/" + random_image[0]) # plt.imshow(img) # plt.title(target_class) # plt.axis("off") # # print(f"Image shape: {img.shape}") # plt.show() # return img # # # #img = view_random_image(target_dir="/Users/rosh/Downloads/Train_data",target_class) # from tensorflow.keras.preprocessing.image import ImageDataGenerator # # tf.random.set_seed(42) # # # Define data augmentation parameters train_datagen = ImageDataGenerator( rotation_range=20, # Random rotation in the range [-20, 20] degrees width_shift_range=0.1, # Random horizontal shift by up to 10% of the width height_shift_range=0.1, # Random vertical shift by up to 10% of the height shear_range=0.2, # Shear intensity (shear angle in radians) zoom_range=0.2, # Random zoom in the range [0.8, 1.2] horizontal_flip=True, # Random horizontal flipping vertical_flip=True, # Random vertical flipping fill_mode='nearest', # Fill mode for points outside the input boundaries rescale=1./255 # Rescaling factor ) valid_datagen = ImageDataGenerator( rescale=1./255 # Rescaling factor ) # # train_dir = "/Users/rosh/Downloads/Train_data" #valid_dir = "/Users/rosh/Downloads/Birds" # train_data = train_datagen.flow_from_directory(directory=train_dir, batch_size=32, target_size=(224, 224), class_mode="categorical", seed=42) # valid_data = valid_datagen.flow_from_directory(directory=valid_dir, # batch_size=32, # target_size=(224, 224), # class_mode="categorical", # seed=42) # model_1 = tf.keras.Sequential([ # tf.keras.layers.Conv2D(filters=32, kernel_size=3, activation="relu", input_shape=(224, 224, 3)), # tf.keras.layers.MaxPool2D(pool_size=2, padding="valid"), # tf.keras.layers.Conv2D(64, 3, activation="relu"), # tf.keras.layers.MaxPool2D(2), # tf.keras.layers.Conv2D(128, 3, activation="relu"), # Increased filters # tf.keras.layers.MaxPool2D(2), # tf.keras.layers.Conv2D(128, 3, activation="relu"), # Increased filters # tf.keras.layers.MaxPool2D(2), # tf.keras.layers.Flatten(), # tf.keras.layers.Dense(256, activation="relu"), # Increased units # tf.keras.layers.Dropout(0.5), # tf.keras.layers.Dense(10, activation="softmax") # ]) # # # model_1.compile(loss=tf.keras.losses.CategoricalCrossentropy(), # optimizer=tf.keras.optimizers.Adam(), # metrics=["accuracy"]) # # # history = model_1.fit(train_data, # epochs=40, # steps_per_epoch=len(train_data), # validation_data=valid_data, # validation_steps=len(valid_data), # verbose=1) # # model_1.save("model_4.h5") l_model = tf.keras.models.load_model('model_4_improved_8.h5') l_model.compile(loss=tf.keras.losses.CategoricalCrossentropy(), optimizer=tf.keras.optimizers.Adam(), metrics=["accuracy"]) l_model.fit(train_data, epochs=5, verbose=1) l_model.save("model_4_improved_8.h5")