from keras.datasets import mnist
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
%matplotlib inline
(x_train, y_train), (x_test, y_test) = mnist.load_data()
#可视化第一个数据
plt.figure()
plt.imshow(x_train[0])
plt.title(y_train[0])
image.png
#图像特征数量
feature_size = x_train[0].shape[0] * x_train[0].shape[1]
#训练数据格式转换
x_train_form = x_train.reshape(x_train.shape[0], feature_size)
#测试数据转换
x_test_form = x_test.reshape(x_test.shape[0], feature_size)
# 数据归一化
x_train_normal = x_train_form / 255
x_test_normal = x_test_form / 255
from keras.utils import to_categorical
#标签归一化
y_train_normal = to_categorical(y_train)
y_test_normal = to_categorical(y_test)
from keras.models import Sequential
from keras.layers import Dense,Activation
#建立模型,两个隐藏层392个神经元,输出层10个神经元,多分类
mlp = Sequential()
mlp.add(Dense(units=392, activation="sigmoid", input_dim=feature_size))
mlp.add(Dense(units=392, activation="sigmoid"))
mlp.add(Dense(units=10, activation="softmax"))
#模型配置
mlp.compile(loss="categorical_crossentropy", optimizer="adam") #多分类
#模型训练
mlp.fit(x_train_normal, y_train_normal, epochs=10)
# 模型评估
y_train_predict = mlp.predict(x_train_form)
y_train_predict = np.argmax(y_train_predict, axis=1)
# 准确率
from sklearn.metrics import accuracy_score
accuracy_score(y_train, y_train_predict)
#测试集准确率
y_test_predict = mlp.predict(x_test_form)
y_test_predict = np.argmax(y_test_predict, axis=1)
accuracy_score(y_test, y_test_predict) #0.9763
#可视化测试集第6个
plt.figure()
plt.imshow(x_test[5])
plt.title(y_test_predict[5])
image.png