Horses / Humans in TensorFlow

#!/usr/bin/python3

import tensorflow as tf

class MCb(tf.keras.callbacks.Callback):
        def on_epoch_end(self, epoch, logs={}):
                if (logs.get('loss') < 0.4):
                        self.model.stop_training = True
                        print("\nDONE\n")

cbs = MCb()

dg = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1/255.)
gen = dg.flow_from_directory(
        'data/training',
        batch_size=128,
        target_size=(300,300),
        class_mode='binary')

vdg = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1/255.)
vgen = vdg.flow_from_directory(
        'data/validation',
        batch_size=128,
        target_size=(300,300),
        class_mode='binary'
)

model = tf.keras.Sequential([
        tf.keras.layers.Input(shape=(300,300,3)),
        tf.keras.layers.Conv2D(filters=16, kernel_size=(3,3), activation='relu'),
        tf.keras.layers.MaxPooling2D((2,2)),
        tf.keras.layers.Conv2D(filters=32, kernel_size=(3,3), activation='relu'),
        tf.keras.layers.MaxPooling2D((2,2)),
        tf.keras.layers.Conv2D(filters=64, kernel_size=(3,3), activation='relu'),
        tf.keras.layers.MaxPooling2D((2,2)),
        tf.keras.layers.Conv2D(filters=64, kernel_size=(3,3), activation='relu'),
        tf.keras.layers.MaxPooling2D((2,2)),
        tf.keras.layers.Conv2D(filters=64, kernel_size=(3,3), activation='relu'),
        tf.keras.layers.MaxPooling2D((2,2)),
        tf.keras.layers.Flatten(),
        tf.keras.layers.Dense(units=512, activation='relu'),
        tf.keras.layers.Dense(units=1, activation='sigmoid'),
])

model.compile(
        optimizer=tf.keras.optimizers.RMSprop(learning_rate=0.001),
        loss=tf.keras.losses.BinaryCrossentropy(),
        metrics=['accuracy']
)

model.fit(gen, epochs=30, callbacks=[cbs])

model.evaluate(vgen)

Comments