from reader import read_testing, read_training
from keras.utils import to_categorical
import numpy as np
import autokeras as ak
from sklearn.metrics import classification_report, confusion_matrix
emotions_map = [ 4 , 4 , 0 , 2 , 4 , 3 , 1 ]
def reading_data( ) :
print( 'Reading data...' )
x_test, y_test = read_testing( )
x_train, y_train = read_training( )
print( y_train.shape )
emotions_count = len( set( emotions_map) )
# y_train = to_categorical(y_train, emotions_count)
# y_test = to_categorical(y_test, emotions_count)
x_train = np.array ( x_train, 'float32' )
y_train = np.array ( y_train, 'float32' )
x_test = np.array ( x_test, 'float32' )
y_test = np.array ( y_test, 'float32' )
x_train /= 255 #normalize inputs between [0, 1]
x_test /= 255
x_train = x_train.reshape ( x_train.shape [ 0 ] , 48 , 48 , 1 )
x_train = x_train.astype ( 'float32' )
x_test = x_test.reshape ( x_test.shape [ 0 ] , 48 , 48 , 1 )
x_test = x_test.astype ( 'float32' )
print( x_train.shape [ 0 ] , 'train samples' )
print( x_test.shape [ 0 ] , 'test samples' )
return x_train, x_test, y_train, y_test
def create_model( x_train, x_test, y_train, y_test) :
model = ak.ImageClassifier ( path= "/automodels/" , verbose= True)
#increasing time will increase the accuracy
model.fit ( x_train, y_train, time_limit= 60 * 60 * 24 )
model.final_fit ( x_train, y_train, x_test, y_test, retrain= True)
score = model.evaluate ( x_test, y_test)
print( "accuracy on test set is " , 100 * score)
autokeras_predictions = autokeras_model.predict ( x_test)
confusion_matrix( y_test, autokeras_predictions)
#exporting model
model.export_autokeras_model ( 'best_auto_keras_model.h5' )
print( "done exporting" )
def main( ) :
x_train, x_test, y_train, y_test = reading_data( )
create_model( x_train, x_test, y_train, y_test)
if __name__ == '__main__' : main( )
ZnJvbSByZWFkZXIgaW1wb3J0IHJlYWRfdGVzdGluZywgcmVhZF90cmFpbmluZwpmcm9tICBrZXJhcy51dGlscyBpbXBvcnQgIHRvX2NhdGVnb3JpY2FsCmltcG9ydCBudW1weSBhcyBucAppbXBvcnQgYXV0b2tlcmFzIGFzIGFrCmZyb20gc2tsZWFybi5tZXRyaWNzIGltcG9ydCBjbGFzc2lmaWNhdGlvbl9yZXBvcnQsIGNvbmZ1c2lvbl9tYXRyaXgKZW1vdGlvbnNfbWFwID0gWzQsIDQsIDAsIDIsIDQsIDMsIDFdCgpkZWYgcmVhZGluZ19kYXRhKCk6CglwcmludCgnUmVhZGluZyBkYXRhLi4uJykKCXhfdGVzdCwgeV90ZXN0ID0gcmVhZF90ZXN0aW5nKCkKCXhfdHJhaW4sIHlfdHJhaW4gPSByZWFkX3RyYWluaW5nKCkKCXByaW50KHlfdHJhaW4uc2hhcGUpCgoJZW1vdGlvbnNfY291bnQgPSBsZW4oc2V0KGVtb3Rpb25zX21hcCkpCgkjIHlfdHJhaW4gPSB0b19jYXRlZ29yaWNhbCh5X3RyYWluLCBlbW90aW9uc19jb3VudCkKCSMgeV90ZXN0ID0gdG9fY2F0ZWdvcmljYWwoeV90ZXN0LCBlbW90aW9uc19jb3VudCkKCgl4X3RyYWluID0gbnAuYXJyYXkoeF90cmFpbiwgJ2Zsb2F0MzInKQoJeV90cmFpbiA9IG5wLmFycmF5KHlfdHJhaW4sICdmbG9hdDMyJykKCXhfdGVzdCA9IG5wLmFycmF5KHhfdGVzdCwgJ2Zsb2F0MzInKQoJeV90ZXN0ID0gbnAuYXJyYXkoeV90ZXN0LCAnZmxvYXQzMicpCgoJeF90cmFpbiAvPSAyNTUgI25vcm1hbGl6ZSBpbnB1dHMgYmV0d2VlbiBbMCwgMV0KCXhfdGVzdCAvPSAyNTUKCSAKCXhfdHJhaW4gPSB4X3RyYWluLnJlc2hhcGUoeF90cmFpbi5zaGFwZVswXSwgNDgsIDQ4LCAxKQoJeF90cmFpbiA9IHhfdHJhaW4uYXN0eXBlKCdmbG9hdDMyJykKCXhfdGVzdCA9IHhfdGVzdC5yZXNoYXBlKHhfdGVzdC5zaGFwZVswXSwgNDgsIDQ4LCAxKQoJeF90ZXN0ID0geF90ZXN0LmFzdHlwZSgnZmxvYXQzMicpCgoJcHJpbnQoeF90cmFpbi5zaGFwZVswXSwgJ3RyYWluIHNhbXBsZXMnKQoJcHJpbnQoeF90ZXN0LnNoYXBlWzBdLCAndGVzdCBzYW1wbGVzJykKCglyZXR1cm4geF90cmFpbiwgeF90ZXN0LCB5X3RyYWluLCB5X3Rlc3QKCmRlZiBjcmVhdGVfbW9kZWwoeF90cmFpbiwgeF90ZXN0LCB5X3RyYWluLCB5X3Rlc3QpOgoJbW9kZWwgPSBhay5JbWFnZUNsYXNzaWZpZXIocGF0aD0iL2F1dG9tb2RlbHMvIiwgdmVyYm9zZT1UcnVlKQoKCSNpbmNyZWFzaW5nIHRpbWUgd2lsbCBpbmNyZWFzZSB0aGUgYWNjdXJhY3kKCW1vZGVsLmZpdCh4X3RyYWluLCB5X3RyYWluLCB0aW1lX2xpbWl0PTYwKjYwKjI0KQoJbW9kZWwuZmluYWxfZml0KHhfdHJhaW4sIHlfdHJhaW4sIHhfdGVzdCwgeV90ZXN0LCByZXRyYWluPVRydWUpCglzY29yZSA9IG1vZGVsLmV2YWx1YXRlKHhfdGVzdCwgeV90ZXN0KQoJcHJpbnQoImFjY3VyYWN5IG9uIHRlc3Qgc2V0IGlzICIsMTAwKnNjb3JlKQoJYXV0b2tlcmFzX3ByZWRpY3Rpb25zID0gYXV0b2tlcmFzX21vZGVsLnByZWRpY3QoeF90ZXN0KQoJY29uZnVzaW9uX21hdHJpeCh5X3Rlc3QsIGF1dG9rZXJhc19wcmVkaWN0aW9ucykKCgkjZXhwb3J0aW5nIG1vZGVsCgltb2RlbC5leHBvcnRfYXV0b2tlcmFzX21vZGVsKCdiZXN0X2F1dG9fa2VyYXNfbW9kZWwuaDUnKQoJcHJpbnQoImRvbmUgZXhwb3J0aW5nIikKCQpkZWYgbWFpbigpOgoJeF90cmFpbiwgeF90ZXN0LCB5X3RyYWluLCB5X3Rlc3QgPSByZWFkaW5nX2RhdGEoKQoJY3JlYXRlX21vZGVsKHhfdHJhaW4sIHhfdGVzdCwgeV90cmFpbiwgeV90ZXN0KQoJCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6IG1haW4oKQ==