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)