Learn practical skills, build real-world projects, and advance your career
import numpy as np
import tensorflow as tf
import os
import zipfile
from os import path, getcwd, chdir

path = f"{getcwd()}/utf-8''happy-or-sad.zip"
zip_ref = zipfile.ZipFile(path,'r')
zip_ref.extractall("h-or-s")
zip_ref.close()
def train_happy_sad_model():
    desired_acc = 0.999
    class myCallback(tf.keras.callbacks.Callback):
        def on_epoch_end(self,epoch,logs ={}):
            if logs.get('acc') > desired_acc:
                print("Reached a 99.9% accuracy, Stopping now!")
                self.model.stop_training = True
                
    callbacks = myCallback()
    
    model = tf.keras.models.Sequential([
            tf.keras.layers.Conv2D(16,(3,3),activation = 'relu',input_shape=(150,150,3)),
            tf.keras.layers.MaxPooling2D(2,2),
            tf.keras.layers.Conv2D(32,(3,3),activation = 'relu'),
            tf.keras.layers.MaxPooling2D(2,2),
            tf.keras.layers.Conv2D(64,(3,3),activation = 'relu'),
            tf.keras.layers.MaxPooling2D(2,2),
            tf.keras.layers.Flatten(),
            tf.keras.layers.Dense(512,activation = 'relu'),
            tf.keras.layers.Dense(1,activation = 'sigmoid')
    ])
    

    
    from tensorflow.keras.optimizers import RMSprop
    model.compile(loss = 'binary_crossentropy',optimizer = RMSprop(lr=0.001),
                metrics = ['acc'])
    
    #########################
    from tensorflow.keras.preprocessing.image import ImageDataGenerator
    train_datagen = ImageDataGenerator(rescale= 1/255)
    
    train_generator = train_datagen.flow_from_directory(
                        'h-or-s',
                        target_size = (150,150),
                        batch_size = 10,
                        class_mode = 'binary')
    
    history = model.fit_generator(
                train_generator,
                steps_per_epoch = 8,
                epochs = 15,
                verbose = 1,
                callbacks = [callbacks])
    
    return history.history["acc"][-1]
train_happy_sad_model()
Found 80 images belonging to 2 classes. WARNING:tensorflow:sample_weight modes were coerced from ... to ['...'] Train for 8 steps Epoch 1/15 8/8 [==============================] - 11s 1s/step - loss: 1.3807 - acc: 0.6000 Epoch 2/15 8/8 [==============================] - 0s 25ms/step - loss: 0.4768 - acc: 0.8375 Epoch 3/15 8/8 [==============================] - 0s 25ms/step - loss: 0.1797 - acc: 0.9375 Epoch 4/15 8/8 [==============================] - 0s 25ms/step - loss: 0.0903 - acc: 0.9625 Epoch 5/15 8/8 [==============================] - 0s 25ms/step - loss: 0.0396 - acc: 0.9875 Epoch 6/15 7/8 [=========================>....] - ETA: 0s - loss: 0.0212 - acc: 1.0000Reached a 99.9% accuracy, Stopping now! 8/8 [==============================] - 0s 26ms/step - loss: 0.0194 - acc: 1.0000
1.0