###################################################################### # MNIST using keras # checked 10-14-2019 (tensorflow version 2.0.0) ###################################################################### import tensorflow.keras as keras from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout from tensorflow.keras.optimizers import RMSprop import matplotlib.pyplot as plt batch_size = 128 num_classes = 10 epochs = 20 (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train = x_train.reshape(60000, 28 * 28) x_train = x_train.astype('float32') / 255.0 x_train.shape x_test = x_test.reshape(10000, 28 * 28) x_test = x_test.astype('float32') / 255.0 x_test.shape # convert class vectors to binary class matrices y_train = keras.utils.to_categorical(y_train, num_classes) y_train.shape y_test = keras.utils.to_categorical(y_test, num_classes) y_test.shape # define the model model = Sequential() model.add(Dense(512, activation = 'relu', input_shape = (784,))) model.add(Dropout(0.2)) model.add(Dense(512, activation = 'relu')) model.add(Dropout(0.2)) model.add(Dense(num_classes, activation = 'softmax')) model.summary() model.compile(loss = 'categorical_crossentropy', optimizer = RMSprop(), metrics = ['accuracy']) history = model.fit(x_train, y_train, batch_size = batch_size, epochs = epochs, verbose = 1, validation_data = (x_test, y_test)) history.history.keys() history.history.get('val_loss') plt.plot(history.epoch, history.history.get('accuracy'), 'bs') plt.plot(history.epoch, history.history.get('val_accuracy'), 'r^') plt.show() score = model.evaluate(x_test, y_test, verbose = 0) print('Test loss:', score[0]) print('Test accuracy:', score[1]) ###################################################################### # THE END ######################################################################