基于多层感知器的Keras实现MNIST识别

基于多层感知器的Keras实现MNIST识别


import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense,Dropout,Activation
from keras.optimizers import RMSprop
# mnist=input_data.read_data_sets('MNIST_data/',one_hot=True)

batch_size=128
num_classes=10
epochs=20
img_size=28*28

(x_train,y_train),(x_test,y_test)=mnist.load_data()
print("x_train.shape=",x_train.shape)
print("y_train.shape=",y_train.shape)
print("x_test.shape=",x_test.shape)
print("y_test.shape=",y_test.shape)
valid_len=5000
x_len=x_train.shape[0]
train_len=x_len-valid_len
x_valid=x_train[train_len:]
y_valid=y_train[train_len:]

x_train=x_train[:train_len]
y_train=y_train[:train_len]
x_train=x_train.reshape(x_train.shape[0],img_size)
x_valid=x_valid.reshape(x_valid.shape[0],img_size)
x_test=x_test.reshape(x_test.shape[0],img_size)

x_train=x_train.astype('float32')
x_valid=x_valid.astype('float32')
x_test=x_test.astype('float32')
x_train/=255
x_valid/=255
x_test/=255
y_train=keras.utils.to_categorical(y_train,num_classes)
y_valid=keras.utils.to_categorical(y_valid,num_classes)
y_test=keras.utils.to_categorical(y_test,num_classes)
print("训练集图像大小:{}".format(x_train.shape))
print("训练集标签大小:{}".format(y_train.shape))
print("验证集图像大小:{}".format(x_valid.shape))
print("验证集标签大小:{}".format(y_valid.shape))
print("测试集图像大小:{}".format(x_test.shape))
print("测试集标签大小:{}".format(y_test.shape))

#创建模型
model=Sequential()
model.add(Dense(512,activation='relu',input_shape=(img_size,)))
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'])
model.fit(x_train,y_train,epochs=epochs,batch_size=batch_size,verbose=1,
          validation_data=(x_valid,y_valid))
score=model.evaluate(x_test,y_test,verbose=0)
print("Test accuracy:{},Test loss:{},{}".format(score[1],score[0],score))

import matplotlib.pyplot as plt
import numpy as np
x_img=x_test[7:8]
prediction=model.predict(x_img)
x_coordinates=np.arange(prediction.shape[1])
plt.bar(x_coordinates,prediction[0][:])
plt.xticks(x_coordinates,np.arange(10))
plt.show()

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qestion_yz_10086/article/details/107933479