-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathKeras_HandWritingRecognition.py
77 lines (56 loc) · 2.36 KB
/
Keras_HandWritingRecognition.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
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.layers.normalization import BatchNormalization
from keras.datasets import mnist
from matplotlib import pyplot as plt
import keras
from keras.callbacks import TensorBoard, ModelCheckpoint,History
import pickle
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(X_train.shape[0], 28, 28, 1)
print(X_train.shape)
X_test = X_test.reshape(X_test.shape[0], 28, 28, 1)
# Convert data into float32 as needed by tensorflow
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255
#Convert the labels to categorical form
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)
batch_size = 32
num_classes = 10
epochs = 1
hist = History()
model = Sequential()
model.add(Conv2D(32, kernel_size = (5, 5), activation='relu', padding = 'same', strides=(1,1), input_shape = ( 28, 28,1))) #why 1, 28, 28 doesnt work?
model.add(MaxPooling2D(pool_size=(2,2), strides = (2,2)))
model.add(Conv2D(64, kernel_size = (5,5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.25))
model.add(Dense(10, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
tensorboard_logs_callback = TensorBoard(log_dir = 'Graph', histogram_freq = 0, write_graph = True, write_images = True)
best_models_callback = ModelCheckpoint('./models/weights.hdf5', monitor = 'val_loss', save_best_only = True)
callbacks = []
callbacks.append(tensorboard_logs_callback)
callbacks.append(best_models_callback)
histor = model.fit(X_train, y_train, batch_size=128, epochs=2,validation_data=(X_test, y_test), callbacks=callbacks)
print(histor.history)
model.load_weights('./models/weights.02-0.03.hdf5')
histor = model.fit(X_train, y_train, batch_size=50, epochs=50,validation_data=(X_test, y_test), callbacks=callbacks)
loss, accuracy = model.evaluate(X_test, y_test)
predictions = model.predict_classes(X_test, batch_size=50)
#print(predictions)
print(X_test)
for i in range(1, 10):
im = X_test[i].reshape(28,28)
plt.imshow(im)
plt.show()
c = y_test[i]
print(c)
print(predictions[i])