This repository has been archived by the owner on Mar 3, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
tfkeras_fcpredict.py
81 lines (71 loc) · 2.49 KB
/
tfkeras_fcpredict.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from __future__ import print_function
import tensorflow as tf
import tensorflow.keras as keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D
import os
import numpy as np
import tamil
import copy
import glob
# Adapted from: https://keras.io/examples/mnist_cnn/
# 1) Setup letters to be built
uyir_plus_ayutham = copy.copy(tamil.utf8.uyir_letters)
uyir_plus_ayutham.append( tamil.utf8.ayudha_letter )
def to_tamil_letter(idx):
return(uyir_plus_ayutham[idx])
def load_acchu_data(mode='train'):
path = os.path.split(__file__)[0]
labels_path = os.path.join(path,'data',mode+'-label-onehot.npy')
images_path = os.path.join(path,'data',mode+'-image.npy')
labels = np.load(labels_path)
images = np.load(images_path)
return labels,images
batch_size = 128
num_classes = 13
epochs = 200
# input image dimensions
img_rows, img_cols = 28, 28
# the data, split between train and test sets
y_train, x_train = load_acchu_data('train')
y_test, x_test = load_acchu_data('test')
x_train = x_train.reshape(len(x_train), img_rows, img_cols,1)
x_test = x_test.reshape(len(x_test), img_rows, img_cols,1)
input_shape = (img_rows, img_cols,1)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255.0
x_test /= 255.0
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')
model = keras.models.load_model('acchu_model_4')
model.summary()
expected = ['a','aa','e','ee','u','uu','eh','aeh','ai','o','oh','au','ak']
assert len(expected) == 13
stats = 0.0
total = 0.0
msg = []
for letter_image in glob.glob('letters-hand-drawn/*.npy'):#npy/
total += 1.0
print("#"*32)
data = np.load(letter_image)
#data = data.transpose()
data = data.reshape(1,28,28)/255.0
output = model.predict(data)
print(letter_image)
predicted = np.argmax(output[0])
print("predicted class=>",to_tamil_letter(predicted))
sfx = letter_image.split('_')[1].replace('.npy','')
print(sfx)
if predicted != expected.index(sfx):
stats += 1.0
msg.append("{0} misclassified as {1}".format(to_tamil_letter(expected.index(sfx)),to_tamil_letter(predicted)))
print(output[0])
print("Failed cases: %g = (%g/%g)"%(stats/total,stats,total))
print("\n".join(msg))
if False:
score = model.evaluate(x_test, y_test, verbose=1)
print('Test loss:', score[0])
print('Test accuracy:', score[1])