from tensorflow.examples.tutorials.mnist import input_data
from keras.models import Sequential
from keras.layers import Convolution2D,MaxPooling2D,Flatten,Dense,Dropout
from keras.optimizers import Adam
from keras.utils import plot_model
file = "../data/MNIST"
mnist = input_data.read_data_sets(file, one_hot=True)
X_train = mnist.train.images
y_train = mnist.train.labels
X_train = X_train.reshape((-1,28,28,1))
X_test = mnist.test.images
y_test = mnist.test.labels
X_test = X_test.reshape((-1,28,28,1))
model = Sequential()
model.add(Convolution2D(input_shape=(28,28,1),filters=30,kernel_size=5,strides=1,padding='same',activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2),strides=1,padding='same'))
model.add(Convolution2D(filters=30,kernel_size=5,strides=1,padding='same',activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2),strides=1,padding='same'))
model.add(Flatten())
model.add(Dense(500,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10,activation='softmax'))
plot_model(model, to_file='mnist_cnn.png', show_shapes=True)
adam = Adam(lr=1e-4)
model.compile(optimizer=adam,loss="categorical_crossentropy",metrics=['accuracy'])
model.fit(X_train,y_train,batch_size=100,epochs=10)
loss,acc = model.evaluate(X_test,y_test)
print(loss,acc)