机器学习——TensorFlow实战手写体识别

from keras.datasets import mnist
# 导入的位置在.keras/datasets/mnist/mnist.npz
(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()


#将数据转换成one-hot格式
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)


#使用 Keras sequential model 定义神经网络
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()

#保存训练的model
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)

#加载训练的model
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])
原文地址:https://www.cnblogs.com/hzcya1995/p/13309451.html