import numpy as np import matplotlib.pyplot as plt mnist = np.load('mnist.npz') x_train = mnist['x_train'][:10000]/255. y_train = np.array([np.eye(10)[n] for n in mnist['y_train'][:10000]]) x_valid = mnist['x_train'][50000:]/255. y_valid = np.array([np.eye(10)[n] for n in mnist['y_train'][50000:]]) x_test = mnist['x_test']/255. y_test = np.array([np.eye(10)[n] for n in mnist['y_test']]) from keras.models import Sequential from keras.layers import Dense, Reshape from keras.optimizers import SGD from keras.callbacks import EarlyStopping model = Sequential() model.add(Reshape((784,), input_shape=(28,28))) model.add(Dense(30, activation='sigmoid')) model.add(Dense(10, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=1.0), metrics=['accuracy']) rec = model.fit(x_train, y_train, epochs=100, batch_size=120, validation_data=(x_valid, y_valid), callbacks=[EarlyStopping(monitor='val_loss', patience=3)]) print('Performance (training)') print('Loss: %.5f, Acc: %.5f' % tuple(model.evaluate(x_train, y_train))) print('Performance (validation)') print('Loss: %.5f, Acc: %.5f' % tuple(model.evaluate(x_valid, y_valid))) print('Performance (testing)') print('Loss: %.5f, Acc: %.5f' % tuple(model.evaluate(x_test, y_test)))