Building an AI-based image-classifier application
import pandas as pd from tensorflow.keras import layers, models from tensorflow.keras.preprocessing.image import ImageDataGenerator img_dir = 'MNIST' train_dir = img_dir + '/Train' test_dir = img_dir + '/Test' n_digits = 10 l1 = layers.Input(shape = [27,27,3]) l2 = layers.Conv2D(30, [3,3], activation = 'relu')(l1) l2a = layers.MaxPool2D([2,2])(l2) l3 = layers.Conv2D(30, [3,3], activation = 'relu')(l2a) l4 = layers.Flatten()(l3) l5 = layers.Dense(300, activation = 'relu')(l4) l6 = layers.Dense(50, activation = 'relu')(l5) l7 = layers.Dense(n_digits, activation = 'softmax')(l6) classifier = models.Model([l1], [l7]) datagen = ImageDataGenerator(rescale=1./255) train_generator = datagen.flow_from_directory( directory = train_dir, target_size = [27,27], batch_size = 10, class_mode = 'categorical') n_train_imgs = len(train_generator.filenames) test_generator = datagen.flow_from_directory( directory = test_dir, target_size = [27,27], batch_size = 1, class_mode = 'categorical') n_test_imgs = len(test_generator.filenames) classifier.compile( optimizer = 'Adam', loss = 'categorical_crossentropy', metrics = ['accuracy']) history = classifier.fit_generator( generator = train_generator, steps_per_epoch = int(n_train_imgs / 10), validation_data = test_generator, validation_steps = n_test_imgs, epochs = 5) classifier.save('MNIST/classifier.h5') history = pd.DataFrame(history.history) history.to_csv('MNIST/train_history.csv', index = False)