"""This module implements conv classifier with maxpool and dropout operation.""" import numpy as np from keras.datasets import mnist from keras.models import Sequential from keras.layers import Dense, Conv2D, Flatten, MaxPool2D, Dropout import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from loss_plot import loss_plot # Number of epochs epochs = 20 # Batchsize batch_size = 128 # Optimizer for the generator from keras.optimizers import Adam optimizer = Adam(lr=0.0001) # Shape of the input image input_shape = (28,28,1) (X_train, y_train), (X_test, y_test) = mnist.load_data() X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, stratify = y_train, test_size = 0.08333, random_state=42) X_train = X_train.reshape(-1,28,28,1) X_val = X_val.reshape(-1,28,28,1) X_test = X_test.reshape(-1,28,28,1) model = Sequential() model.add(Conv2D(32, kernel_size=(3,3), input_shape=input_shape, activation = 'relu')) model.add(MaxPool2D(2,2)) model.add(Dropout(0.2)) model.add(Flatten()) model.add(Dense(128, activation = 'relu')) model.add(Dropout(0.2)) model.add(Dense(10, activation='softmax')) model.compile(loss = 'sparse_categorical_crossentropy', optimizer=optimizer, metrics = ['accuracy']) history = model.fit(X_train, y_train, epochs = epochs, batch_size=batch_size, validation_data=(X_val, y_val)) loss,acc = model.evaluate(X_test, y_test) print('Test loss:', loss) print('Accuracy:', acc) loss_plot(history)