#!/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
Post a Comment