Cainvas
Model Files
final_model.h5
keras
Model
deepSea Compiled Models
final_model.exe
deepSea
Ubuntu

Facial Emotion Classification

Credit: AITS Cainvas Community

Photo by Lewis Osborne on Dribbble

Importing Necessary Libraries

In [1]:
!pip install wget
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: wget in ./.local/lib/python3.7/site-packages (3.2)
WARNING: You are using pip version 20.3.1; however, version 21.2.1 is available.
You should consider upgrading via the '/opt/tljh/user/bin/python -m pip install --upgrade pip' command.
In [2]:
import numpy as np
import matplotlib.pyplot as plt
import cv2
import os
import tensorflow as tf
import wget
In [3]:
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.preprocessing import image
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D
from tensorflow.keras.layers import Activation, Dropout, Flatten, Dense
from tensorflow.keras import backend as K
from tensorflow.keras.models import load_model

Importing the Dataset

In [4]:
url = "https://cainvas-static.s3.amazonaws.com/media/user_data/cainvas-admin/FE.zip"
file = wget.download(url)
In [5]:
import zipfile
data = zipfile.ZipFile(file,"r")
data.extractall("FE")

#data.printdir()
In [6]:
image = image.load_img("FE/FE/FE/Train/Happy/1.jpg")
In [7]:
plt.imshow(image)
Out[7]:
<matplotlib.image.AxesImage at 0x7fec6b454518>
In [8]:
cv2.imread("FE/FE/FE/Train/Happy/1.jpg").shape
Out[8]:
(1500, 1000, 3)

Preprocessing Steps

In [9]:
img_width,img_height = 256,256
train_data_dir = "FE/FE/FE/Train/"
validation_data_dir = "FE/FE/FE/Validation/"
batch_size = 20
In [10]:
if K.image_data_format() == 'channels_first':
    input_shape = (3,img_width,img_height)
else:
    input_shape = (img_width,img_height,3)
In [11]:
train= ImageDataGenerator(rescale = 1./255 , featurewise_center = False, shear_range = 0.2,
                        featurewise_std_normalization = False,
                        rotation_range=10,
                        width_shift_range=0.1,
                        height_shift_range=0.1,
                        zoom_range=.1,
                        horizontal_flip=True)
validation = ImageDataGenerator(rescale = 1./255 )
In [12]:
train_dataset = train.flow_from_directory(train_data_dir,target_size = (256,256),batch_size = 10,class_mode = "binary") 
validation_dataset = validation.flow_from_directory(validation_data_dir,target_size = (256,256),batch_size = 5,class_mode = "binary")
Found 83 images belonging to 2 classes.
Found 83 images belonging to 2 classes.
In [13]:
train_dataset.class_indices
Out[13]:
{'Happy': 0, 'Sad': 1}
In [14]:
train_dataset.classes
Out[14]:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int32)

Model

In [15]:
model = Sequential()
model.add(Conv2D(32,(3,3),input_shape = (256,256,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size = (4,4)))

model.add(Conv2D(64,(3,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size = (4,4)))
model.add(Dropout(0.7))

model.add(Conv2D(128,(3,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size = (4,4)))
model.add(Dropout(0.7))

model.add(Flatten())

model.add(Dense(128,activation = "relu"))
model.add(Dense(1, activation = 'sigmoid'))
In [16]:
model.summary()
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 254, 254, 32)      896       
_________________________________________________________________
activation (Activation)      (None, 254, 254, 32)      0         
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 63, 63, 32)        0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 61, 61, 64)        18496     
_________________________________________________________________
activation_1 (Activation)    (None, 61, 61, 64)        0         
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 15, 15, 64)        0         
_________________________________________________________________
dropout (Dropout)            (None, 15, 15, 64)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 13, 13, 128)       73856     
_________________________________________________________________
activation_2 (Activation)    (None, 13, 13, 128)       0         
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 3, 3, 128)         0         
_________________________________________________________________
dropout_1 (Dropout)          (None, 3, 3, 128)         0         
_________________________________________________________________
flatten (Flatten)            (None, 1152)              0         
_________________________________________________________________
dense (Dense)                (None, 128)               147584    
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 129       
=================================================================
Total params: 240,961
Trainable params: 240,961
Non-trainable params: 0
_________________________________________________________________
In [17]:
model.compile(loss = "binary_crossentropy",optimizer = "Adam" ,metrics = ['accuracy'])
In [18]:
model_fit = model.fit_generator(train_dataset,steps_per_epoch = 9,epochs = 150,validation_data = validation_dataset)
WARNING:tensorflow:From <ipython-input-18-64be9fd0d38f>:1: Model.fit_generator (from tensorflow.python.keras.engine.training) is deprecated and will be removed in a future version.
Instructions for updating:
Please use Model.fit, which supports generators.
Epoch 1/150
9/9 [==============================] - 2s 171ms/step - loss: 0.7502 - accuracy: 0.3735 - val_loss: 0.6937 - val_accuracy: 0.4940
Epoch 2/150
9/9 [==============================] - 1s 132ms/step - loss: 0.7000 - accuracy: 0.4819 - val_loss: 0.6912 - val_accuracy: 0.5301
Epoch 3/150
9/9 [==============================] - 1s 130ms/step - loss: 0.6864 - accuracy: 0.5422 - val_loss: 0.6870 - val_accuracy: 0.5422
Epoch 4/150
9/9 [==============================] - 1s 130ms/step - loss: 0.6919 - accuracy: 0.5422 - val_loss: 0.6874 - val_accuracy: 0.5542
Epoch 5/150
9/9 [==============================] - 1s 131ms/step - loss: 0.6884 - accuracy: 0.5663 - val_loss: 0.6853 - val_accuracy: 0.6627
Epoch 6/150
9/9 [==============================] - 1s 131ms/step - loss: 0.6972 - accuracy: 0.4819 - val_loss: 0.6826 - val_accuracy: 0.6386
Epoch 7/150
9/9 [==============================] - 1s 132ms/step - loss: 0.6764 - accuracy: 0.5904 - val_loss: 0.6859 - val_accuracy: 0.6024
Epoch 8/150
9/9 [==============================] - 1s 129ms/step - loss: 0.6748 - accuracy: 0.6265 - val_loss: 0.6803 - val_accuracy: 0.5783
Epoch 9/150
9/9 [==============================] - 1s 142ms/step - loss: 0.6467 - accuracy: 0.6024 - val_loss: 0.6709 - val_accuracy: 0.6386
Epoch 10/150
9/9 [==============================] - 1s 128ms/step - loss: 0.6719 - accuracy: 0.5783 - val_loss: 0.6787 - val_accuracy: 0.5783
Epoch 11/150
9/9 [==============================] - 1s 128ms/step - loss: 0.6754 - accuracy: 0.6024 - val_loss: 0.6934 - val_accuracy: 0.5181
Epoch 12/150
9/9 [==============================] - 1s 134ms/step - loss: 0.6884 - accuracy: 0.5663 - val_loss: 0.6838 - val_accuracy: 0.5422
Epoch 13/150
9/9 [==============================] - 1s 127ms/step - loss: 0.6870 - accuracy: 0.5422 - val_loss: 0.6746 - val_accuracy: 0.5783
Epoch 14/150
9/9 [==============================] - 1s 130ms/step - loss: 0.6793 - accuracy: 0.5783 - val_loss: 0.6730 - val_accuracy: 0.6024
Epoch 15/150
9/9 [==============================] - 1s 133ms/step - loss: 0.6667 - accuracy: 0.5904 - val_loss: 0.6560 - val_accuracy: 0.6024
Epoch 16/150
9/9 [==============================] - 1s 130ms/step - loss: 0.6362 - accuracy: 0.6627 - val_loss: 0.6486 - val_accuracy: 0.6627
Epoch 17/150
9/9 [==============================] - 1s 132ms/step - loss: 0.6502 - accuracy: 0.5663 - val_loss: 0.6502 - val_accuracy: 0.6386
Epoch 18/150
9/9 [==============================] - 1s 128ms/step - loss: 0.6477 - accuracy: 0.6506 - val_loss: 0.6363 - val_accuracy: 0.6386
Epoch 19/150
9/9 [==============================] - 1s 126ms/step - loss: 0.6260 - accuracy: 0.6747 - val_loss: 0.6391 - val_accuracy: 0.6627
Epoch 20/150
9/9 [==============================] - 1s 128ms/step - loss: 0.7044 - accuracy: 0.6145 - val_loss: 0.6400 - val_accuracy: 0.6265
Epoch 21/150
9/9 [==============================] - 1s 129ms/step - loss: 0.6482 - accuracy: 0.5663 - val_loss: 0.6516 - val_accuracy: 0.6145
Epoch 22/150
9/9 [==============================] - 1s 129ms/step - loss: 0.6556 - accuracy: 0.5663 - val_loss: 0.6284 - val_accuracy: 0.6145
Epoch 23/150
9/9 [==============================] - 1s 130ms/step - loss: 0.6114 - accuracy: 0.6747 - val_loss: 0.6195 - val_accuracy: 0.6747
Epoch 24/150
9/9 [==============================] - 1s 130ms/step - loss: 0.6472 - accuracy: 0.5904 - val_loss: 0.6451 - val_accuracy: 0.6024
Epoch 25/150
9/9 [==============================] - 1s 130ms/step - loss: 0.6563 - accuracy: 0.5904 - val_loss: 0.6322 - val_accuracy: 0.6265
Epoch 26/150
9/9 [==============================] - 1s 131ms/step - loss: 0.6696 - accuracy: 0.5422 - val_loss: 0.6542 - val_accuracy: 0.5663
Epoch 27/150
9/9 [==============================] - 1s 128ms/step - loss: 0.6612 - accuracy: 0.5904 - val_loss: 0.6080 - val_accuracy: 0.6867
Epoch 28/150
9/9 [==============================] - 1s 127ms/step - loss: 0.6314 - accuracy: 0.6627 - val_loss: 0.6195 - val_accuracy: 0.6867
Epoch 29/150
9/9 [==============================] - 1s 144ms/step - loss: 0.5856 - accuracy: 0.6386 - val_loss: 0.6014 - val_accuracy: 0.6867
Epoch 30/150
9/9 [==============================] - 1s 128ms/step - loss: 0.6374 - accuracy: 0.5904 - val_loss: 0.5940 - val_accuracy: 0.6747
Epoch 31/150
9/9 [==============================] - 1s 127ms/step - loss: 0.6057 - accuracy: 0.6386 - val_loss: 0.5731 - val_accuracy: 0.7108
Epoch 32/150
9/9 [==============================] - 1s 134ms/step - loss: 0.6209 - accuracy: 0.6627 - val_loss: 0.5934 - val_accuracy: 0.6265
Epoch 33/150
9/9 [==============================] - 1s 127ms/step - loss: 0.5603 - accuracy: 0.6506 - val_loss: 0.5597 - val_accuracy: 0.7108
Epoch 34/150
9/9 [==============================] - 1s 132ms/step - loss: 0.6500 - accuracy: 0.6265 - val_loss: 0.5732 - val_accuracy: 0.6747
Epoch 35/150
9/9 [==============================] - 1s 132ms/step - loss: 0.5718 - accuracy: 0.7108 - val_loss: 0.5702 - val_accuracy: 0.7108
Epoch 36/150
9/9 [==============================] - 1s 131ms/step - loss: 0.6181 - accuracy: 0.6265 - val_loss: 0.5741 - val_accuracy: 0.6747
Epoch 37/150
9/9 [==============================] - 1s 132ms/step - loss: 0.5550 - accuracy: 0.6988 - val_loss: 0.5545 - val_accuracy: 0.7470
Epoch 38/150
9/9 [==============================] - 1s 131ms/step - loss: 0.5218 - accuracy: 0.7349 - val_loss: 0.5429 - val_accuracy: 0.6988
Epoch 39/150
9/9 [==============================] - 1s 130ms/step - loss: 0.5579 - accuracy: 0.6627 - val_loss: 0.5206 - val_accuracy: 0.7349
Epoch 40/150
9/9 [==============================] - 1s 130ms/step - loss: 0.5252 - accuracy: 0.6747 - val_loss: 0.5197 - val_accuracy: 0.7229
Epoch 41/150
9/9 [==============================] - 1s 131ms/step - loss: 0.5675 - accuracy: 0.6627 - val_loss: 0.5157 - val_accuracy: 0.7229
Epoch 42/150
9/9 [==============================] - 1s 142ms/step - loss: 0.5529 - accuracy: 0.6506 - val_loss: 0.5299 - val_accuracy: 0.7349
Epoch 43/150
9/9 [==============================] - 1s 128ms/step - loss: 0.5267 - accuracy: 0.6386 - val_loss: 0.5158 - val_accuracy: 0.7229
Epoch 44/150
9/9 [==============================] - 1s 129ms/step - loss: 0.5132 - accuracy: 0.6627 - val_loss: 0.5243 - val_accuracy: 0.6747
Epoch 45/150
9/9 [==============================] - 1s 131ms/step - loss: 0.5798 - accuracy: 0.6747 - val_loss: 0.5037 - val_accuracy: 0.7229
Epoch 46/150
9/9 [==============================] - 1s 129ms/step - loss: 0.4858 - accuracy: 0.6867 - val_loss: 0.5005 - val_accuracy: 0.7229
Epoch 47/150
9/9 [==============================] - 1s 130ms/step - loss: 0.5401 - accuracy: 0.7108 - val_loss: 0.4983 - val_accuracy: 0.7229
Epoch 48/150
9/9 [==============================] - 1s 131ms/step - loss: 0.5155 - accuracy: 0.6265 - val_loss: 0.5079 - val_accuracy: 0.6988
Epoch 49/150
9/9 [==============================] - 1s 131ms/step - loss: 0.5653 - accuracy: 0.6747 - val_loss: 0.5318 - val_accuracy: 0.7470
Epoch 50/150
9/9 [==============================] - 1s 132ms/step - loss: 0.5725 - accuracy: 0.6747 - val_loss: 0.5598 - val_accuracy: 0.7108
Epoch 51/150
9/9 [==============================] - 1s 128ms/step - loss: 0.5950 - accuracy: 0.6024 - val_loss: 0.5421 - val_accuracy: 0.7229
Epoch 52/150
9/9 [==============================] - 1s 129ms/step - loss: 0.5152 - accuracy: 0.6988 - val_loss: 0.5087 - val_accuracy: 0.7711
Epoch 53/150
9/9 [==============================] - 1s 130ms/step - loss: 0.5000 - accuracy: 0.7229 - val_loss: 0.4850 - val_accuracy: 0.7108
Epoch 54/150
9/9 [==============================] - 1s 131ms/step - loss: 0.5057 - accuracy: 0.6747 - val_loss: 0.4976 - val_accuracy: 0.7470
Epoch 55/150
9/9 [==============================] - 1s 132ms/step - loss: 0.4997 - accuracy: 0.6988 - val_loss: 0.4710 - val_accuracy: 0.7229
Epoch 56/150
9/9 [==============================] - 1s 132ms/step - loss: 0.4947 - accuracy: 0.7349 - val_loss: 0.4779 - val_accuracy: 0.7590
Epoch 57/150
9/9 [==============================] - 1s 132ms/step - loss: 0.4877 - accuracy: 0.7470 - val_loss: 0.4745 - val_accuracy: 0.7470
Epoch 58/150
9/9 [==============================] - 1s 129ms/step - loss: 0.4367 - accuracy: 0.7349 - val_loss: 0.4563 - val_accuracy: 0.7952
Epoch 59/150
9/9 [==============================] - 1s 130ms/step - loss: 0.4839 - accuracy: 0.6747 - val_loss: 0.4404 - val_accuracy: 0.7349
Epoch 60/150
9/9 [==============================] - 1s 132ms/step - loss: 0.4602 - accuracy: 0.7349 - val_loss: 0.4561 - val_accuracy: 0.7711
Epoch 61/150
9/9 [==============================] - 1s 132ms/step - loss: 0.5139 - accuracy: 0.7590 - val_loss: 0.4630 - val_accuracy: 0.7590
Epoch 62/150
9/9 [==============================] - 1s 130ms/step - loss: 0.5757 - accuracy: 0.6627 - val_loss: 0.4914 - val_accuracy: 0.7590
Epoch 63/150
9/9 [==============================] - 1s 131ms/step - loss: 0.5983 - accuracy: 0.6265 - val_loss: 0.5257 - val_accuracy: 0.7349
Epoch 64/150
9/9 [==============================] - 1s 132ms/step - loss: 0.6287 - accuracy: 0.6024 - val_loss: 0.5885 - val_accuracy: 0.7229
Epoch 65/150
9/9 [==============================] - 1s 131ms/step - loss: 0.6062 - accuracy: 0.6747 - val_loss: 0.5850 - val_accuracy: 0.7229
Epoch 66/150
9/9 [==============================] - 1s 132ms/step - loss: 0.5521 - accuracy: 0.7349 - val_loss: 0.5574 - val_accuracy: 0.6867
Epoch 67/150
9/9 [==============================] - 1s 129ms/step - loss: 0.5192 - accuracy: 0.6867 - val_loss: 0.5193 - val_accuracy: 0.7229
Epoch 68/150
9/9 [==============================] - 1s 131ms/step - loss: 0.5026 - accuracy: 0.7108 - val_loss: 0.4834 - val_accuracy: 0.7470
Epoch 69/150
9/9 [==============================] - 1s 132ms/step - loss: 0.4662 - accuracy: 0.7229 - val_loss: 0.4784 - val_accuracy: 0.7349
Epoch 70/150
9/9 [==============================] - 1s 132ms/step - loss: 0.6131 - accuracy: 0.7108 - val_loss: 0.4688 - val_accuracy: 0.7229
Epoch 71/150
9/9 [==============================] - 1s 131ms/step - loss: 0.6272 - accuracy: 0.6506 - val_loss: 0.5377 - val_accuracy: 0.6747
Epoch 72/150
9/9 [==============================] - 1s 131ms/step - loss: 0.5265 - accuracy: 0.7229 - val_loss: 0.5555 - val_accuracy: 0.7349
Epoch 73/150
9/9 [==============================] - 1s 131ms/step - loss: 0.5504 - accuracy: 0.6145 - val_loss: 0.5260 - val_accuracy: 0.7590
Epoch 74/150
9/9 [==============================] - 1s 132ms/step - loss: 0.4810 - accuracy: 0.7349 - val_loss: 0.4931 - val_accuracy: 0.7831
Epoch 75/150
9/9 [==============================] - 1s 132ms/step - loss: 0.5028 - accuracy: 0.7349 - val_loss: 0.4793 - val_accuracy: 0.7470
Epoch 76/150
9/9 [==============================] - 1s 131ms/step - loss: 0.4766 - accuracy: 0.7349 - val_loss: 0.4660 - val_accuracy: 0.7229
Epoch 77/150
9/9 [==============================] - 1s 131ms/step - loss: 0.4499 - accuracy: 0.7711 - val_loss: 0.4490 - val_accuracy: 0.7831
Epoch 78/150
9/9 [==============================] - 1s 129ms/step - loss: 0.4280 - accuracy: 0.7711 - val_loss: 0.4383 - val_accuracy: 0.7711
Epoch 79/150
9/9 [==============================] - 1s 130ms/step - loss: 0.4605 - accuracy: 0.7349 - val_loss: 0.4197 - val_accuracy: 0.7952
Epoch 80/150
9/9 [==============================] - 1s 133ms/step - loss: 0.4497 - accuracy: 0.6988 - val_loss: 0.4083 - val_accuracy: 0.7831
Epoch 81/150
9/9 [==============================] - 1s 131ms/step - loss: 0.4634 - accuracy: 0.7470 - val_loss: 0.4411 - val_accuracy: 0.7952
Epoch 82/150
9/9 [==============================] - 1s 132ms/step - loss: 0.4724 - accuracy: 0.7470 - val_loss: 0.4305 - val_accuracy: 0.8072
Epoch 83/150
9/9 [==============================] - 1s 131ms/step - loss: 0.4317 - accuracy: 0.7349 - val_loss: 0.4172 - val_accuracy: 0.8313
Epoch 84/150
9/9 [==============================] - 1s 129ms/step - loss: 0.4538 - accuracy: 0.7349 - val_loss: 0.4016 - val_accuracy: 0.8072
Epoch 85/150
9/9 [==============================] - 1s 131ms/step - loss: 0.4675 - accuracy: 0.7470 - val_loss: 0.4282 - val_accuracy: 0.8193
Epoch 86/150
9/9 [==============================] - 1s 131ms/step - loss: 0.5023 - accuracy: 0.6747 - val_loss: 0.4331 - val_accuracy: 0.8313
Epoch 87/150
9/9 [==============================] - 1s 131ms/step - loss: 0.4340 - accuracy: 0.7831 - val_loss: 0.4340 - val_accuracy: 0.7952
Epoch 88/150
9/9 [==============================] - 1s 132ms/step - loss: 0.4378 - accuracy: 0.7470 - val_loss: 0.4144 - val_accuracy: 0.8313
Epoch 89/150
9/9 [==============================] - 1s 132ms/step - loss: 0.4398 - accuracy: 0.7349 - val_loss: 0.4011 - val_accuracy: 0.8072
Epoch 90/150
9/9 [==============================] - 1s 132ms/step - loss: 0.4269 - accuracy: 0.7590 - val_loss: 0.4067 - val_accuracy: 0.7952
Epoch 91/150
9/9 [==============================] - 1s 131ms/step - loss: 0.4160 - accuracy: 0.7229 - val_loss: 0.4131 - val_accuracy: 0.8434
Epoch 92/150
9/9 [==============================] - 1s 132ms/step - loss: 0.4531 - accuracy: 0.6867 - val_loss: 0.4001 - val_accuracy: 0.8193
Epoch 93/150
9/9 [==============================] - 1s 130ms/step - loss: 0.3733 - accuracy: 0.8313 - val_loss: 0.3836 - val_accuracy: 0.8193
Epoch 94/150
9/9 [==============================] - 1s 128ms/step - loss: 0.4679 - accuracy: 0.7349 - val_loss: 0.3760 - val_accuracy: 0.8313
Epoch 95/150
9/9 [==============================] - 1s 128ms/step - loss: 0.4334 - accuracy: 0.7590 - val_loss: 0.4420 - val_accuracy: 0.7952
Epoch 96/150
9/9 [==============================] - 1s 130ms/step - loss: 0.4660 - accuracy: 0.7470 - val_loss: 0.3920 - val_accuracy: 0.8193
Epoch 97/150
9/9 [==============================] - 1s 133ms/step - loss: 0.5187 - accuracy: 0.7470 - val_loss: 0.4006 - val_accuracy: 0.8434
Epoch 98/150
9/9 [==============================] - 1s 128ms/step - loss: 0.4723 - accuracy: 0.7470 - val_loss: 0.3941 - val_accuracy: 0.8072
Epoch 99/150
9/9 [==============================] - 1s 132ms/step - loss: 0.4255 - accuracy: 0.7590 - val_loss: 0.3755 - val_accuracy: 0.8675
Epoch 100/150
9/9 [==============================] - 1s 131ms/step - loss: 0.3582 - accuracy: 0.8434 - val_loss: 0.3733 - val_accuracy: 0.8313
Epoch 101/150
9/9 [==============================] - 1s 128ms/step - loss: 0.3445 - accuracy: 0.8313 - val_loss: 0.3595 - val_accuracy: 0.8434
Epoch 102/150
9/9 [==============================] - 1s 127ms/step - loss: 0.4303 - accuracy: 0.7590 - val_loss: 0.3724 - val_accuracy: 0.8193
Epoch 103/150
9/9 [==============================] - 1s 128ms/step - loss: 0.3842 - accuracy: 0.7952 - val_loss: 0.3737 - val_accuracy: 0.8675
Epoch 104/150
9/9 [==============================] - 1s 132ms/step - loss: 0.4333 - accuracy: 0.7470 - val_loss: 0.3686 - val_accuracy: 0.8072
Epoch 105/150
9/9 [==============================] - 1s 126ms/step - loss: 0.4199 - accuracy: 0.7349 - val_loss: 0.3556 - val_accuracy: 0.7952
Epoch 106/150
9/9 [==============================] - 1s 128ms/step - loss: 0.4603 - accuracy: 0.7590 - val_loss: 0.3976 - val_accuracy: 0.7952
Epoch 107/150
9/9 [==============================] - 1s 130ms/step - loss: 0.3984 - accuracy: 0.8193 - val_loss: 0.4026 - val_accuracy: 0.8313
Epoch 108/150
9/9 [==============================] - 1s 127ms/step - loss: 0.4140 - accuracy: 0.7831 - val_loss: 0.3775 - val_accuracy: 0.8193
Epoch 109/150
9/9 [==============================] - 1s 128ms/step - loss: 0.4351 - accuracy: 0.7590 - val_loss: 0.3547 - val_accuracy: 0.8193
Epoch 110/150
9/9 [==============================] - 1s 129ms/step - loss: 0.3740 - accuracy: 0.8554 - val_loss: 0.3413 - val_accuracy: 0.8434
Epoch 111/150
9/9 [==============================] - 1s 129ms/step - loss: 0.3755 - accuracy: 0.7831 - val_loss: 0.3371 - val_accuracy: 0.8193
Epoch 112/150
9/9 [==============================] - 1s 129ms/step - loss: 0.3630 - accuracy: 0.7711 - val_loss: 0.3411 - val_accuracy: 0.8675
Epoch 113/150
9/9 [==============================] - 1s 133ms/step - loss: 0.4621 - accuracy: 0.7470 - val_loss: 0.3458 - val_accuracy: 0.8313
Epoch 114/150
9/9 [==============================] - 1s 136ms/step - loss: 0.4027 - accuracy: 0.7711 - val_loss: 0.3337 - val_accuracy: 0.8313
Epoch 115/150
9/9 [==============================] - 1s 128ms/step - loss: 0.4232 - accuracy: 0.7470 - val_loss: 0.3641 - val_accuracy: 0.8554
Epoch 116/150
9/9 [==============================] - 1s 133ms/step - loss: 0.3988 - accuracy: 0.8193 - val_loss: 0.3707 - val_accuracy: 0.8554
Epoch 117/150
9/9 [==============================] - 1s 128ms/step - loss: 0.4328 - accuracy: 0.8434 - val_loss: 0.3720 - val_accuracy: 0.8072
Epoch 118/150
9/9 [==============================] - 1s 130ms/step - loss: 0.3675 - accuracy: 0.8313 - val_loss: 0.3277 - val_accuracy: 0.8434
Epoch 119/150
9/9 [==============================] - 1s 132ms/step - loss: 0.3337 - accuracy: 0.8313 - val_loss: 0.3057 - val_accuracy: 0.8795
Epoch 120/150
9/9 [==============================] - 1s 131ms/step - loss: 0.3793 - accuracy: 0.7349 - val_loss: 0.3085 - val_accuracy: 0.8554
Epoch 121/150
9/9 [==============================] - 1s 128ms/step - loss: 0.4019 - accuracy: 0.7590 - val_loss: 0.3366 - val_accuracy: 0.8554
Epoch 122/150
9/9 [==============================] - 1s 131ms/step - loss: 0.4009 - accuracy: 0.7831 - val_loss: 0.3814 - val_accuracy: 0.8072
Epoch 123/150
9/9 [==============================] - 1s 130ms/step - loss: 0.4120 - accuracy: 0.8072 - val_loss: 0.3326 - val_accuracy: 0.8675
Epoch 124/150
9/9 [==============================] - 1s 132ms/step - loss: 0.3658 - accuracy: 0.8313 - val_loss: 0.3157 - val_accuracy: 0.8554
Epoch 125/150
9/9 [==============================] - 1s 131ms/step - loss: 0.3733 - accuracy: 0.8313 - val_loss: 0.3033 - val_accuracy: 0.8795
Epoch 126/150
9/9 [==============================] - 1s 131ms/step - loss: 0.3457 - accuracy: 0.8193 - val_loss: 0.2930 - val_accuracy: 0.8916
Epoch 127/150
9/9 [==============================] - 1s 131ms/step - loss: 0.4090 - accuracy: 0.7831 - val_loss: 0.3319 - val_accuracy: 0.8072
Epoch 128/150
9/9 [==============================] - 1s 132ms/step - loss: 0.4036 - accuracy: 0.7952 - val_loss: 0.4035 - val_accuracy: 0.7831
Epoch 129/150
9/9 [==============================] - 1s 133ms/step - loss: 0.4772 - accuracy: 0.7952 - val_loss: 0.3959 - val_accuracy: 0.7952
Epoch 130/150
9/9 [==============================] - 1s 131ms/step - loss: 0.3907 - accuracy: 0.7831 - val_loss: 0.3747 - val_accuracy: 0.8434
Epoch 131/150
9/9 [==============================] - 1s 130ms/step - loss: 0.4494 - accuracy: 0.7952 - val_loss: 0.3247 - val_accuracy: 0.8795
Epoch 132/150
9/9 [==============================] - 1s 130ms/step - loss: 0.2934 - accuracy: 0.8916 - val_loss: 0.3636 - val_accuracy: 0.8434
Epoch 133/150
9/9 [==============================] - 1s 132ms/step - loss: 0.3587 - accuracy: 0.8193 - val_loss: 0.3019 - val_accuracy: 0.9157
Epoch 134/150
9/9 [==============================] - 1s 130ms/step - loss: 0.3059 - accuracy: 0.8916 - val_loss: 0.2723 - val_accuracy: 0.9036
Epoch 135/150
9/9 [==============================] - 1s 132ms/step - loss: 0.2661 - accuracy: 0.8434 - val_loss: 0.2718 - val_accuracy: 0.9036
Epoch 136/150
9/9 [==============================] - 1s 132ms/step - loss: 0.2892 - accuracy: 0.8795 - val_loss: 0.2769 - val_accuracy: 0.8675
Epoch 137/150
9/9 [==============================] - 1s 128ms/step - loss: 0.3490 - accuracy: 0.8313 - val_loss: 0.2532 - val_accuracy: 0.9036
Epoch 138/150
9/9 [==============================] - 1s 131ms/step - loss: 0.4380 - accuracy: 0.8313 - val_loss: 0.2989 - val_accuracy: 0.8554
Epoch 139/150
9/9 [==============================] - 1s 132ms/step - loss: 0.3369 - accuracy: 0.8313 - val_loss: 0.2926 - val_accuracy: 0.8916
Epoch 140/150
9/9 [==============================] - 1s 131ms/step - loss: 0.3295 - accuracy: 0.8193 - val_loss: 0.2768 - val_accuracy: 0.9277
Epoch 141/150
9/9 [==============================] - 1s 130ms/step - loss: 0.2637 - accuracy: 0.8313 - val_loss: 0.2525 - val_accuracy: 0.9157
Epoch 142/150
9/9 [==============================] - 1s 131ms/step - loss: 0.3229 - accuracy: 0.8072 - val_loss: 0.2732 - val_accuracy: 0.8795
Epoch 143/150
9/9 [==============================] - 1s 140ms/step - loss: 0.2767 - accuracy: 0.8554 - val_loss: 0.2788 - val_accuracy: 0.8795
Epoch 144/150
9/9 [==============================] - 1s 141ms/step - loss: 0.3265 - accuracy: 0.8434 - val_loss: 0.2751 - val_accuracy: 0.9036
Epoch 145/150
9/9 [==============================] - 1s 132ms/step - loss: 0.3347 - accuracy: 0.7952 - val_loss: 0.2676 - val_accuracy: 0.8916
Epoch 146/150
9/9 [==============================] - 1s 129ms/step - loss: 0.2774 - accuracy: 0.8795 - val_loss: 0.2466 - val_accuracy: 0.9398
Epoch 147/150
9/9 [==============================] - 1s 141ms/step - loss: 0.3010 - accuracy: 0.8675 - val_loss: 0.2396 - val_accuracy: 0.9277
Epoch 148/150
9/9 [==============================] - 1s 131ms/step - loss: 0.3516 - accuracy: 0.8434 - val_loss: 0.2925 - val_accuracy: 0.8795
Epoch 149/150
9/9 [==============================] - 1s 131ms/step - loss: 0.3637 - accuracy: 0.7952 - val_loss: 0.3314 - val_accuracy: 0.8795
Epoch 150/150
9/9 [==============================] - 1s 131ms/step - loss: 0.3040 - accuracy: 0.8916 - val_loss: 0.2568 - val_accuracy: 0.9157
In [19]:
model.save('final_model.h5')
In [20]:
model = load_model('final_model.h5')

Analysis

In [21]:
print("accuracy at epoch 1:",model_fit.history["accuracy"][0])
print("accuracy at epoch 44",model_fit.history["accuracy"][149])
print("validation accuracy at epoch 1:",model_fit.history["val_accuracy"][0])
print("validation accuracy at epoch 44:",model_fit.history["val_accuracy"][149])
plt.plot(model_fit.history["accuracy"])
plt.plot(model_fit.history["val_accuracy"])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
accuracy at epoch 1: 0.3734939694404602
accuracy at epoch 44 0.891566276550293
validation accuracy at epoch 1: 0.4939759075641632
validation accuracy at epoch 44: 0.9156626462936401
In [22]:
print(f"loss at epoch 1: {model_fit.history['loss'][0]}")
print(f"loss at epoch 44: {model_fit.history['loss'][149]}")
print(f"validation loss at epoch 1: {model_fit.history['loss'][0]}")
print(f"validation loss at epoch 44: {model_fit.history['loss'][149]}")
plt.plot(model_fit.history['loss'])
plt.plot(model_fit.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
loss at epoch 1: 0.7502434253692627
loss at epoch 44: 0.30402451753616333
validation loss at epoch 1: 0.7502434253692627
validation loss at epoch 44: 0.30402451753616333

Prediction

In [23]:
test_url = "https://cainvas-static.s3.amazonaws.com/media/user_data/cainvas-admin/Test_FE.zip"
test_file = wget.download(test_url)
In [24]:
data2 = zipfile.ZipFile(test_file,"r")
data2.extractall("Test FE")
In [25]:
from tensorflow.keras.preprocessing import image
In [26]:
img_pred = image.load_img("Test FE/Test FE/converted-1.jpg",target_size = (256,256))
img_pred = image.img_to_array(img_pred)
img_pred = np.expand_dims(img_pred,axis = 0)
In [27]:
result = model.predict(img_pred)
print(result)
if result[0][0] == 1:
    print("Sad")
else:
    print("Happy")
[[0.]]
Happy

DeepCC

In [28]:
!deepCC final_model.h5
[INFO]
Reading [keras model] 'final_model.h5'
[SUCCESS]
Saved 'final_model_deepC/final_model.onnx'
[INFO]
Reading [onnx model] 'final_model_deepC/final_model.onnx'
[INFO]
Model info:
  ir_vesion : 5
  doc       : 
[WARNING]
[ONNX]: terminal (input/output) conv2d_input's shape is less than 1. Changing it to 1.
[WARNING]
[ONNX]: terminal (input/output) dense_1's shape is less than 1. Changing it to 1.
WARN (GRAPH): found operator node with the same name (dense_1) as io node.
[INFO]
Running DNNC graph sanity check ...
[SUCCESS]
Passed sanity check.
[INFO]
Writing C++ file 'final_model_deepC/final_model.cpp'
[INFO]
deepSea model files are ready in 'final_model_deepC/' 
[RUNNING COMMAND]
g++ -std=c++11 -O3 -fno-rtti -fno-exceptions -I. -I/opt/tljh/user/lib/python3.7/site-packages/deepC-0.13-py3.7-linux-x86_64.egg/deepC/include -isystem /opt/tljh/user/lib/python3.7/site-packages/deepC-0.13-py3.7-linux-x86_64.egg/deepC/packages/eigen-eigen-323c052e1731 "final_model_deepC/final_model.cpp" -D_AITS_MAIN -o "final_model_deepC/final_model.exe"
[RUNNING COMMAND]
size "final_model_deepC/final_model.exe"
   text	   data	    bss	    dec	    hex	filename
1136827	   3768	    760	1141355	 116a6b	final_model_deepC/final_model.exe
[SUCCESS]
Saved model as executable "final_model_deepC/final_model.exe"
In [ ]: