from keras.datasets import mnist
(x_train,y_train),(x_test,y_test)=mnist.load_data('mnist/mnist.npz')
x_train=x_train.reshape(60000,784)
x_test=x_test.reshape(10000,784)
x_train=x_train.astype('float32')
x_test=x_test.astype('float32')
x_train/=255
x_test/=255
import numpy as np
import matplotlib.pyplot as plt
label,count=np.unique(y_train,return_counts=True)
plt.bar(label,count,width=0.7,align='center')
plt.xlabel('label')
plt.ylabel('count')
plt.xticks(label)
for a,b in zip(label,count):
plt.text(a,b,'%d'%b,ha='center',va='bottom')
plt.show()
from keras.utils import np_utils
n_class=10
Y_train=np_utils.to_categorical(y_train,n_class)
Y_test=np_utils.to_categorical(y_test,n_class)
from keras.models import Sequential
from keras.layers.core import Dense,Activation
model=Sequential()
model.add(Dense(512,input_shape=(784,)))
model.add(Activation('relu'))
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy',metrics=['accuracy'],optimizer='adam')
history=model.fit(x_train,
Y_train,
batch_size=128,
epochs=5,
verbose=2,
validation_data=(x_test,Y_test)
)
fig=plt.figure()
plt.subplot(2,1,1)
plt.plot(history.history['accuracy'],label='train')
plt.plot(history.history['val_accuracy'],label='test')
plt.title('Mode accuracy')
plt.ylabel('accuracy')
plt.xlabel('epochs')
plt.legend()
plt.subplot(2,1,2)
plt.plot(history.history['loss'],label='train')
plt.plot(history.history['val_loss'],label='test')
plt.title('Mode Loss')
plt.legend()
plt.show()
import os
import tensorflow.gfile as gfile
save_dir='./mnist/model/'
if gfile.Exists(save_dir):
gfile.DeleteRecursively(save_dir)
gfile.MakeDirs(save_dir)
model_name='my_model.h5'
model_path=os.path.join(save_dir,model_name)
model.save(model_path)
print('saved at %s'%model_path)
from keras.models import load_model
mnist_model=load_model(model_path)
loss_and_metrics=mnist_model.evaluate(x_test,Y_test,verbose=2)
print('loss:%f'%loss_and_metrics[0])
print('accuracy:%f'%loss_and_metrics[1])