Commit 25bd4e9a authored by MithilaGunasinghe's avatar MithilaGunasinghe

Shapes Identification generate CNN model

parent 8f221af8
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Author : Gunasinghe M.D.
IT NUM : IT17043342
"""
# CNN classifier
# Building architecture of our CNN classifier
import keras
from keras.models import Sequential
from keras.layers import Convolution2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
# Initialising the CNN
classifier = Sequential()
# Step - 1 Convolution
classifier.add(Convolution2D(
16, 3, 3, input_shape=(28, 28, 1), activation='relu'))
# Step - 2 Pooling
classifier.add(MaxPooling2D(pool_size=(2, 2)))
classifier.add(Convolution2D(32, 3, 3, activation='relu'))
classifier.add(MaxPooling2D(pool_size=(2, 2)))
# Step - 3 Flattening
classifier.add(Flatten())
# Step - 4 Full connection -> First layer input layer then hidden layer
# and last softmax layer
classifier.add(Dense(56, activation='relu', kernel_initializer='uniform'))
classifier.add(Dense(3, activation='softmax', kernel_initializer='uniform'))
# Compiling the CNN
classifier.compile(
optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# Image Preprocessing
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(
rescale=1. / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1. / 255)
training_set = train_datagen.flow_from_directory(
'shapes/train', target_size=(28, 28), batch_size=1, color_mode="grayscale", class_mode='categorical')
#X_images, y_labels = training_set.filenames, training_set.classes
test_set = test_datagen.flow_from_directory(
'shapes/test', target_size=(28, 28), batch_size=1,color_mode="grayscale", class_mode='categorical')
# Logging the training of models
from keras.callbacks import CSVLogger, EarlyStopping
csv_logger = CSVLogger('log.csv', append=True, separator=';')
early_stopping_monitor = EarlyStopping(patience=5)
steps_per_epoch = len(training_set.filenames) # 300
validation_steps = len(test_set.filenames) # 90
classifier.summary()
model_info = classifier.fit_generator(training_set, steps_per_epoch=steps_per_epoch, epochs=25, validation_data=test_set,
validation_steps=validation_steps, callbacks=[csv_logger, early_stopping_monitor])
classifier.save("shapes_classification.h5")
# plot model history after each epoch
from visulization import plot_model_history
plot_model_history(model_info)
'''
Author : Gunasinghe M.D.
IT NUM : IT17043342
'''
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_keras_model_file('shapes_classification.h5')
tfmodel = converter.convert()
open ("model.tflite" , "wb") .write(tfmodel)
\ No newline at end of file
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Author : Gunasinghe M.D.
IT NUM : IT17043342
"""
# Image Preprocessing for train, test and validation sets
import os
import random
import glob
def prepare_test_data(n):
base_path = "shapes"
f1 = random.sample(glob.glob(os.path.join(base_path, "test/circles") + "/*"), n)
f2 = random.sample(glob.glob(os.path.join(base_path, "test/squares") + "/*"), n)
f3 = random.sample(glob.glob(os.path.join(base_path, "test/triangles") + "/*"), n)
for c in f1:
os.remove(c)
for s in f2:
os.remove(s)
for t in f3:
os.remove(t)
def prepare_validation_data(n):
base_path = "shapes"
f1 = random.sample(glob.glob(os.path.join(base_path, "validation/circles") + "/*"), n)
f2 = random.sample(glob.glob(os.path.join(base_path, "validation/squares") + "/*"), n)
f3 = random.sample(glob.glob(os.path.join(base_path, "validation/triangles") + "/*"), n)
for c in f1:
os.remove(c)
for s in f2:
os.remove(s)
for t in f3:
os.remove(t)
# n = number of samples to remove from each categorical folder
prepare_test_data(70)
prepare_validation_data(40)
\ No newline at end of file
epoch;acc;loss;val_acc;val_loss
0;0.29333333333333333;1.1021293564637502;0.3333333333333333;1.0980687565273708
1;0.35;1.0999792923529943;0.35555555555555557;1.097972235414717
2;0.31333333333333335;1.0998473330338796;0.3333333333333333;1.0975483298301696
3;0.39666666666666667;1.0915542052189509;0.5666666666666667;1.0058740867508782
4;0.5133333333333333;0.9937442035103837;0.4777777777777778;0.9656427173978752
5;0.5866666666666667;0.9386348085850478;0.5555555555555556;0.86869801685421
6;0.65;0.8198991794868683;0.6888888888888889;0.7557085374628918
7;0.7333333333333333;0.6825591519506027;0.7777777777777778;0.6168535319751957
8;0.8066666666666666;0.5363872799169621;0.6888888888888889;0.67444432924272
9;0.78;0.5705832035536877;0.8222222222222222;0.48538642855556746
10;0.8133333333333334;0.500751046326477;0.8777777777777778;0.31637109270151187
11;0.8533333333333334;0.38070510240384464;0.8444444444444444;0.42024516973091924
12;0.8566666666666667;0.35376141064388017;0.8444444444444444;0.36274474893230035
13;0.8833333333333333;0.30654860066572537;0.8666666666666667;0.3740410789840982
14;0.91;0.24653060877016592;0.9444444444444444;0.20371840975387115
15;0.91;0.23943806987263827;0.9333333333333333;0.17990061224534296
16;0.89;0.27273950695357596;0.9333333333333333;0.15174684854468615
17;0.9333333333333333;0.20382062615582688;0.9888888888888889;0.054488436287827034
18;0.9366666666666666;0.17752609247883147;0.9333333333333333;0.1432164458058788
19;0.9233333333333333;0.21212721058228198;0.9555555555555556;0.1452621202745042
20;0.9533333333333334;0.12411385271760471;0.9777777777777777;0.054697405406647366
21;0.96;0.13570099500452537;1.0;0.029889299359932883
22;0.9566666666666667;0.1281874972612834;0.9555555555555556;0.11651920964032567
23;0.97;0.10924995794870952;0.9888888888888889;0.03410356732701937
24;0.97;0.10621539547962233;1.0;0.018577026133786805
0;0.2966666666666667;1.1024928019444147;0.45555555555555555;1.097968214088016
1;0.34;1.111143814921379;0.4111111111111111;1.0909762700398764
2;0.41;1.0789569250742594;0.4222222222222222;1.0103889912366868
3;0.49666666666666665;0.9889124457289775;0.5888888888888889;0.877334033490883
4;0.59;0.9037570924436052;0.5666666666666667;0.8481556372510062
5;0.7066666666666667;0.713488160589089;0.7;0.6365465399886792
6;0.78;0.5349133421300212;0.8111111111111111;0.3751573544571228
7;0.8533333333333334;0.40419769435703834;0.8111111111111111;0.4625196482868988
8;0.8466666666666667;0.4003748563643118;0.8666666666666667;0.2862474222282698
9;0.8633333333333333;0.3505672497783477;0.9;0.2780155003012624
10;0.8966666666666666;0.2847911869841816;0.9666666666666667;0.12341440132586286
11;0.8966666666666666;0.28560135678677395;0.9444444444444444;0.1425273594744441
12;0.9266666666666666;0.2234943222547679;0.9666666666666667;0.09773324105288327
13;0.92;0.19570738831778803;0.8888888888888888;0.18837703390051658
14;0.9166666666666666;0.2399715888836198;0.9555555555555556;0.11566149951415242
15;0.96;0.15282417273996554;0.9888888888888889;0.054442138786437666
16;0.9466666666666667;0.1442776797820819;0.9888888888888889;0.05929118138232228
17;0.97;0.11683380947491552;1.0;0.020476891390213185
18;0.9633333333333334;0.11048679052008993;0.9;0.2607078030724275
19;0.93;0.15185930114223814;1.0;0.01981931464206039
20;0.9533333333333334;0.12143664269047018;0.9888888888888889;0.03962222233879484
21;0.9733333333333334;0.1049603466999568;0.9111111111111111;0.19589236812648447
22;0.95;0.11491358882647457;0.9888888888888889;0.027169717451493134
23;0.97;0.08477862928842181;0.9888888888888889;0.033657396587247174
24;0.9566666666666667;0.11472323884931958;1.0;0.009743158908804617
0;0.3;1.1021297387282054;0.3333333333333333;1.098387180434333
1;0.31666666666666665;1.101465438803037;0.3333333333333333;1.0954816778500875
2;0.39;1.0816635606686273;0.4777777777777778;0.989203151067098
3;0.5333333333333333;0.943225392450889;0.6333333333333333;0.8276369107266267
4;0.6466666666666666;0.7807893539980675;0.7;0.6865226181327468
5;0.7866666666666666;0.5574312569738443;0.8444444444444444;0.3945849456837297
6;0.8566666666666667;0.38642888322652047;0.8333333333333334;0.3847256015657308
7;0.8666666666666667;0.35940120505411566;0.9333333333333333;0.17343034370514943
8;0.8833333333333333;0.29315737118295754;0.9333333333333333;0.14767354367302485
9;0.9133333333333333;0.2975298812368601;0.9444444444444444;0.14707265250981688
10;0.93;0.18652200535098928;0.9777777777777777;0.0729098610522884
11;0.9266666666666666;0.2169656333634265;0.8777777777777778;0.2079286410599811
12;0.9433333333333334;0.20134307888881192;0.9777777777777777;0.08663621393185063
13;0.94;0.15568304392984986;0.9777777777777777;0.06906644460615846
14;0.93;0.16935204814797114;0.9888888888888889;0.03684264753542487
15;0.96;0.1452038977954267;0.9888888888888889;0.03962157638703856
16;0.9466666666666667;0.12375886316151655;0.9888888888888889;0.07883670315496481
17;0.96;0.11870158137859231;0.9555555555555556;0.07232851184984652
18;0.9466666666666667;0.15830942703666992;0.9777777777777777;0.06708373401407404
19;0.95;0.11663488458349694;0.9888888888888889;0.029292231157757302
20;0.9666666666666667;0.09241651421692755;1.0;0.03044141556557381
21;0.9833333333333333;0.06146877233634617;0.9777777777777777;0.05788214005767003
22;0.9533333333333334;0.11411452959590136;0.9555555555555556;0.09742962131545012
23;0.97;0.09423861650462806;0.9777777777777777;0.05658224377698815
24;0.9533333333333334;0.12431888750346053;0.9777777777777777;0.038065941155809295
0;0.3233333333333333;1.1069280427694321;0.3333333333333333;1.0983202974001567
1;0.31;1.0996916504700978;0.3333333333333333;1.0985570112864176
2;0.3233333333333333;1.0994071559111278;0.4777777777777778;1.0945832623375786
3;0.44333333333333336;1.091769926995039;0.4888888888888889;0.9975160790814294
4;0.5533333333333333;0.9304487958798806;0.5222222222222223;0.8798719747975055
5;0.6733333333333333;0.7991099805400397;0.8111111111111111;0.5508037334728417
6;0.78;0.5845360958720751;0.8;0.49109353070638867
7;0.8066666666666666;0.5473822022039289;0.8111111111111111;0.39103925800383066
8;0.8133333333333334;0.5060161508850676;0.8888888888888888;0.3430117765340078
9;0.85;0.4065314543420148;0.8888888888888888;0.3554072034810815
10;0.8466666666666667;0.3823637784835478;0.8333333333333334;0.39130441422806195
11;0.8633333333333333;0.3626307521596065;0.9333333333333333;0.1745677969569139
12;0.88;0.3042755278111872;0.9111111111111111;0.18182776231968206
13;0.8733333333333333;0.3007615586238732;0.9111111111111111;0.26164478572425576
14;0.8933333333333333;0.29238535866772214;0.9555555555555556;0.15428050215739908
15;0.8833333333333333;0.30418825111709663;0.9444444444444444;0.13710885563669928
16;0.9233333333333333;0.23158255326935356;0.9333333333333333;0.18657986689292633
17;0.9166666666666666;0.23932522699325412;0.9111111111111111;0.223500666337554
18;0.9;0.216020803392003;0.9555555555555556;0.0937227627189085
19;0.9233333333333333;0.21318304360481907;0.9666666666666667;0.09495315271668388
20;0.93;0.18315597944826797;0.9333333333333333;0.16338848182747243
21;0.9366666666666666;0.1571949661199481;0.9666666666666667;0.07755491187018149
22;0.9333333333333333;0.15235870470483487;0.9666666666666667;0.10085187362051329
23;0.9366666666666666;0.15659029777351255;0.9888888888888889;0.04561912518691145
24;0.9666666666666667;0.11029112723986628;0.9888888888888889;0.04732635886319609
0;0.30666666666666664;1.1101013598839442;0.3333333333333333;1.0985741549068027
1;0.3233333333333333;1.100367112159729;0.3333333333333333;1.098134504424201
2;0.33;1.0997979178031285;0.5666666666666667;1.089741697576311
3;0.5366666666666666;1.0597114316622416;0.43333333333333335;0.9888555743628078
4;0.5633333333333334;0.9458379011352857;0.6111111111111112;0.8320463940708174
5;0.6533333333333333;0.7628156321619948;0.7777777777777778;0.5185287246066663
6;0.7833333333333333;0.5581800283584744;0.8888888888888888;0.35994207289897734
7;0.8133333333333334;0.4528389344721412;0.8888888888888888;0.3119140728207033
8;0.8966666666666666;0.3342290966581398;0.8888888888888888;0.24057142533290768
9;0.8933333333333333;0.3060030813970176;0.9555555555555556;0.14337385641528172
10;0.8766666666666667;0.3073535125722022;0.8888888888888888;0.26720971781741254
11;0.8966666666666666;0.2536353188590389;0.9666666666666667;0.1428992116461207
12;0.9133333333333333;0.22506776153478314;0.9444444444444444;0.17564091361363063
13;0.9433333333333334;0.1697722327545489;0.9444444444444444;0.13292412642676651
14;0.94;0.17541259536815534;0.9555555555555556;0.08823297872916479
15;0.9166666666666666;0.21760635532225933;0.9666666666666667;0.06416265826748284
16;0.9466666666666667;0.15808314480723615;0.9777777777777777;0.052665442891821436
17;0.9466666666666667;0.1247723067734511;0.9666666666666667;0.11258568354277496
18;0.9366666666666666;0.17622050174475135;0.9444444444444444;0.14027067146413844
19;0.9566666666666667;0.13585960034744587;0.9555555555555556;0.12994329620613393
20;0.96;0.12504480919915806;0.9666666666666667;0.10541855434527116
21;0.9633333333333334;0.10217472580477997;0.9777777777777777;0.05512338823270571
0;0.31666666666666665;1.1044566788276036;0.43333333333333335;1.0950985736317105
1;0.34;1.1016220529874166;0.45555555555555555;1.071094082461463
2;0.48333333333333334;1.0259687234461308;0.5777777777777777;0.9048458715279897
3;0.57;0.931777855368952;0.6666666666666666;0.7433711546990607
4;0.6766666666666666;0.7581871482792;0.6666666666666666;0.7261567839317852
5;0.77;0.5887001623399556;0.8888888888888888;0.3465110164446135
6;0.8333333333333334;0.4440724574757041;0.9111111111111111;0.2627747560226352
7;0.83;0.39412571473357577;0.9222222222222223;0.19322037300783754
8;0.88;0.33717031058942665;0.9222222222222223;0.22110817058623475
9;0.8733333333333333;0.3087092481532121;0.9555555555555556;0.12709545019349913
10;0.89;0.2834527987321629;0.9444444444444444;0.1923489952438672
11;0.9266666666666666;0.21691894466208092;0.9222222222222223;0.18636375825362864
12;0.9133333333333333;0.22736707239523032;0.9444444444444444;0.16716850448486567
13;0.9166666666666666;0.196607742129936;0.9888888888888889;0.06568004098535311
14;0.93;0.1972291822572303;0.9666666666666667;0.0805063051041622
15;0.9433333333333334;0.17399543377913157;0.9888888888888889;0.049059654096843194
16;0.9466666666666667;0.17615168006557197;0.9777777777777777;0.06232123745576072
17;0.9466666666666667;0.16654395524213883;0.9777777777777777;0.08208031763151034
18;0.95;0.1374350551636723;0.9555555555555556;0.19627452524545644
19;0.9733333333333334;0.09676061352745345;0.9666666666666667;0.10148706152094368
20;0.9533333333333334;0.16697404597613233;0.9555555555555556;0.14717611342358244
0;0.36;1.1000051619609197;0.3333333333333333;1.1392436510986752
1;0.37666666666666665;1.1005631188551586;0.5777777777777777;1.085070440504286
2;0.4266666666666667;1.0642447211345036;0.5222222222222223;0.936849817302492
3;0.57;0.9065542963892221;0.6666666666666666;0.7474767903693849
4;0.6833333333333333;0.7419425017246977;0.7777777777777778;0.5342858961084858
5;0.77;0.5690965897793648;0.8555555555555555;0.39044609395867963
6;0.8233333333333334;0.4662553457704295;0.8888888888888888;0.2414346289795099
7;0.85;0.3793094040557238;0.9444444444444444;0.1766650510720663
8;0.8566666666666667;0.3392536332937379;0.8777777777777778;0.2889134517333736
9;0.9;0.2948075863869129;0.9333333333333333;0.15663555745454183
10;0.9166666666666666;0.26311404273571193;0.9333333333333333;0.15211170727726162
11;0.9133333333333333;0.2351939945080206;0.9777777777777777;0.09362097546448543
12;0.9033333333333333;0.2245103605554717;0.9888888888888889;0.0835721743331937
13;0.9433333333333334;0.19774662739986884;0.9888888888888889;0.057488164304515345
14;0.9133333333333333;0.211270667961453;0.9777777777777777;0.076187762366099
15;0.93;0.1833906529321452;1.0;0.0377394505544288
16;0.9366666666666666;0.18946242791885615;0.9666666666666667;0.08267630371371822
17;0.9333333333333333;0.19669028479693404;0.9888888888888889;0.05075722201238825
18;0.9366666666666666;0.17036728942577198;0.9444444444444444;0.11699757186300795
19;0.9666666666666667;0.1136080761139135;0.9888888888888889;0.04078608755233941
20;0.9733333333333334;0.10288304058618607;1.0;0.026145380296874996
21;0.9533333333333334;0.14663997547002278;0.9222222222222223;0.20992747245209245
22;0.9366666666666666;0.15872551181674935;0.9888888888888889;0.05554037881847099
23;0.9633333333333334;0.10662604465088667;0.9888888888888889;0.038965914227561724
24;0.96;0.14484905767787168;0.9777777777777777;0.043099091407148966
0;0.2966666666666667;1.101619871854782;0.3333333333333333;1.0983738660812379
1;0.31666666666666665;1.0995729740460713;0.3333333333333333;1.0971401810646058
2;0.38333333333333336;1.096563483874003;0.4666666666666667;1.088875793086158
3;0.49;1.0192673313617706;0.4888888888888889;0.9418174978345633
4;0.6466666666666666;0.8057573953953882;0.7555555555555555;0.5847227472398017
5;0.7666666666666667;0.5985581304897399;0.8666666666666667;0.3594106081071206
6;0.8633333333333333;0.3865375413664151;0.8666666666666667;0.26723270468048416
7;0.8666666666666667;0.34876513199085213;0.7666666666666667;0.5391611470142783
8;0.9166666666666666;0.26522184591194675;0.8777777777777778;0.3059879948137191
9;0.9266666666666666;0.255861996667536;0.9888888888888889;0.136189596746893
10;0.8966666666666666;0.23721734272486325;0.9777777777777777;0.0932717735424578
11;0.9266666666666666;0.20408792957270636;0.9888888888888889;0.08560264976898427
12;0.9466666666666667;0.17367930325318337;0.9;0.20474433959592947
13;0.92;0.20943068658812838;0.9888888888888889;0.05461921227623192
14;0.9333333333333333;0.18896159706504573;0.9777777777777777;0.057616255595841576
15;0.9433333333333334;0.1582943967829111;0.9777777777777777;0.0435147247275127
16;0.9433333333333334;0.14427528096664696;1.0;0.03550728705290456
17;0.97;0.10700906684930213;1.0;0.037127656334402404
18;0.9633333333333334;0.1274074076354088;1.0;0.019284471188691064
19;0.9566666666666667;0.09169820058070954;1.0;0.013587676817597425
20;0.9366666666666666;0.14221510520711408;0.9555555555555556;0.09387423235962412
21;0.9633333333333334;0.11670985123764155;1.0;0.010757623550124783
22;0.9666666666666667;0.07131863682925346;1.0;0.014863678026584322
23;0.97;0.09415951795327307;1.0;0.018416572121917815
24;0.9733333333333334;0.07098047807415336;1.0;0.00688888817891748
0;0.3233333333333333;1.1027912664413453;0.3333333333333333;1.096113912264506
1;0.42333333333333334;1.076791142721971;0.5222222222222223;0.9274453924761878
2;0.56;0.8995265093942483;0.7111111111111111;0.6750076610181067
3;0.7233333333333334;0.6659805350905905;0.6222222222222222;0.8080540818666729
4;0.7966666666666666;0.46705799374166723;0.9111111111111111;0.26645009269122966
5;0.86;0.37365546731317106;0.9222222222222223;0.2161213486286417
6;0.87;0.3535085251479177;0.9111111111111111;0.2250709111092672
7;0.8933333333333333;0.2908587746020445;0.9555555555555556;0.13391536808387375
8;0.9233333333333333;0.2476600987159964;0.9666666666666667;0.10530442757003394
9;0.9066666666666666;0.2774880774622337;0.9444444444444444;0.11806566731385525
10;0.94;0.21551491769363262;0.9666666666666667;0.12152048524141605
11;0.94;0.19513589861168537;0.9111111111111111;0.19434599120540447
12;0.9466666666666667;0.1471581848812419;0.9777777777777777;0.058658319874635524
13;0.9433333333333334;0.16741322004613088;0.9555555555555556;0.14370135838493198
14;0.9466666666666667;0.1438330618375509;0.9555555555555556;0.12372367476997413
15;0.9333333333333333;0.20343630765278406;0.9666666666666667;0.0838476932170582
16;0.9533333333333334;0.12739566528551213;0.9777777777777777;0.09755038775824276
17;0.9533333333333334;0.12653674951199137;0.9888888888888889;0.09492823752018688
0;0.29333333333333333;1.1053550149997076;0.3333333333333333;1.099117848608229
1;0.37;1.098280638853709;0.3333333333333333;1.0879688084125518
2;0.44;1.074598064025243;0.5444444444444444;0.9808526393440035
3;0.45;1.0110696507493655;0.5777777777777777;0.9026194406880272
4;0.58;0.9000873857488235;0.7111111111111111;0.6582836952888304
5;0.67;0.7358127784046034;0.7888888888888889;0.5138211043655044
6;0.83;0.490210063441967;0.8333333333333334;0.35438148736332853
7;0.7933333333333333;0.44313407883086864;0.8666666666666667;0.3084346290076307
8;0.8533333333333334;0.38352624399897955;0.9555555555555556;0.18470008522623782
9;0.9066666666666666;0.2748007304976151;0.9111111111111111;0.16975904339855738
10;0.8866666666666667;0.2700867192549049;0.9;0.21099073331968915
11;0.9033333333333333;0.2682834683278634;0.9777777777777777;0.1319126325279083
12;0.93;0.23584329796770664;0.9777777777777777;0.14198254569268
13;0.9133333333333333;0.23641223268289346;0.9555555555555556;0.17552077722699802
14;0.9233333333333333;0.23344331065933754;1.0;0.06640025253626744
15;0.9333333333333333;0.1889087635505954;0.9777777777777777;0.1351269013176231
16;0.9466666666666667;0.169254085603435;0.9666666666666667;0.11013653386932781
17;0.9466666666666667;0.18856496160100358;0.9666666666666667;0.11653666070517658
18;0.9566666666666667;0.12328977887658624;0.9333333333333333;0.1276551425305671
19;0.94;0.15985977947601146;0.9555555555555556;0.09743126563037836
#!/usr/bin/env python
'''
Author : Gunasinghe M.D.
IT NUM : IT17043342
'''
# Giving class label from probabilities
from keras.utils import np_utils
import numpy as np
def probas_to_classes(y_pred):
if len(y_pred.shape) > 1 and y_pred.shape[1] > 1:
return categorical_probas_to_classes(y_pred)
return np.array([1 if p > 0.5 else 0 for p in y_pred])
def categorical_probas_to_classes(p):
return np.argmax(p, axis=1)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Author : Gunasinghe M.D.
IT NUM : IT17043342
"""
import pandas as pd
import numpy as np
import cv2
import argparse
from keras.models import load_model
from keras.preprocessing.image import ImageDataGenerator
from sklearn.metrics import confusion_matrix, accuracy_score
from myutil import probas_to_classes
# Loading and compiling presaved trained CNN
model = load_model('shapes_classification.h5')
label = {0: "Circle", 1: "Square", 2: "Triangle"}
def predict_one(file_name):
img = cv2.imread(file_name,cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, (28, 28))
img = np.reshape(img, [1, 28, 28, 1])
classes = model.predict_classes(img)[0]
category = label[classes]
print("\nAnd {1} is the {0}".format(category, file_name))
# return category
print(classes)
def predict_dataset(input_dir):
test_datagen = ImageDataGenerator(rescale=1. / 255)
test_generator = test_datagen.flow_from_directory("shapes/test",
target_size=(28, 28),
color_mode="grayscale",
shuffle=False,
class_mode='categorical',
batch_size=1)
filenames = test_generator.filenames
nb_samples = len(filenames)
predict = model.predict_generator(test_generator, steps=nb_samples)
return predict, test_generator
def main():
# Instantiate the parser
parser = argparse.ArgumentParser()
parser.add_argument(
'--testdata', help='Classify images on test data', action='store_true')
parser.add_argument(
'--validationdata', help='Classify images on test data', action='store_true')
parser.add_argument('--image', help='Input your image file name')
args = parser.parse_args()
on_dataset = False
if args.testdata:
print("Classify images on test dataset")
on_dataset = True
input_dir = "shapes/test"
if args.validationdata:
print("Classify images on validation dataset")
on_dataset = True
input_dir = "shapes/validation"
if on_dataset:
predict, test_generator = predict_dataset(input_dir)
y_pred = probas_to_classes(predict)
y_true = test_generator.classes
X_images = test_generator.filenames
cm = confusion_matrix(y_true, y_pred)
ac = accuracy_score(y_true, y_pred)
for ele in list(zip(X_images, y_true, y_pred)):
print(ele)
else:
file_name = args.image
predict_one(file_name)
if __name__ == '__main__':
main()
'''
Author : Gunasinghe M.D.
IT NUM : IT17043342
'''
import matplotlib.pyplot as plt
import numpy as np
def plot_model_history(model_history):
fig, axs = plt.subplots(1, 2, figsize=(15, 5))
# summarize history for accuracy
axs[0].plot(range(1, len(model_history.history['acc']) + 1),
model_history.history['acc'])
axs[0].plot(range(1, len(model_history.history['val_acc']) + 1),
model_history.history['val_acc'])
axs[0].set_title('Model Accuracy')
axs[0].set_ylabel('Accuracy')
axs[0].set_xlabel('Epoch')
axs[0].set_xticks(np.arange(1, len(model_history.history[
'acc']) + 1), len(model_history.history['acc']) / 10)
axs[0].legend(['train', 'val'], loc='best')
# summarize history for loss
axs[1].plot(range(1, len(model_history.history['loss']) + 1),
model_history.history['loss'])
axs[1].plot(range(1, len(model_history.history['val_loss']) + 1),
model_history.history['val_loss'])
axs[1].set_title('Model Loss')
axs[1].set_ylabel('Loss')
axs[1].set_xlabel('Epoch')
axs[1].set_xticks(np.arange(1, len(model_history.history[
'loss']) + 1), len(model_history.history['loss']) / 10)
axs[1].legend(['train', 'val'], loc='best')
plt.show()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment