多层感知器
相关库
import matplotlib.pyplot as plt
import numpy as np
from keras.datasets import mnist
from keras.layers import Dense
from keras.models import Sequential
from keras.utils import np_utils
加载数据
file = mnist.load_data()
# tuple类型
# 包含训练集:特征(60000,28,28),标签(60000,)
# 测试集:特征(10000,28,28),标签(10000,)
x_test, y_test = file[0][0], file[0][1]
x_train, y_train = file[1][0], file[1][1]
picture_size = x_train.shape[1] * x_train.shape[2] # 图片大小
画图
def plot_(size=4):
# 分块显示size张图片
for i in range(size):
plt.subplot(size ** 0.5, size ** 0.5, i + 1)
plt.imshow(x_train[i], cmap=plt.get_cmap('gray'))
plt.show()
数据预处理
def preprocess(data, process_x=True):
# x转换成二维数组,并进行归一化(0-1)
# y进行one-hot 编码
if process_x == True:
data = np.array(data).reshape((data.shape[0], picture_size)).astype('float32') # 保留小数位
data = data / 255
else:
data = np_utils.to_categorical(data) # one-hot编码
return data
x_train = preprocess(x_train, process_x=True) # (10000, 784)
x_test = preprocess(x_test, process_x=True) # (60000, 784)
y_train = preprocess(y_train, process_x=False) # (10000, 10)
y_test = preprocess(y_test, process_x=False) # (60000, 10)
创建、训练模型、精度评价
def MLP_model():
# 创建模型
model = Sequential([
Dense(input_dim=picture_size, units=picture_size, activation='relu'),
Dense(units=picture_size, activation='relu'),
Dense(units=10, activation='softmax')
])
# 模型编译
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# 训练模型
model.fit(x_train, y_train, batch_size=100, epochs=20)
# 精度评价
result_1 = model.evaluate(x_train, y_train, batch_size=200)
print('train accuracy:', result_1[1])
result_2 = model.evaluate(x_test, y_test, batch_size=200)
print('test accuracy:', result_2[1])
model=MLP_model()
train accuracy: 1.0
200/60000 [..............................] - ETA: 2s
1000/60000 [..............................] - ETA: 3s
2200/60000 [>.............................] - ETA: 3s
3400/60000 [>.............................] - ETA: 3s
5200/60000 [=>............................] - ETA: 2s
7400/60000 [==>...........................] - ETA: 2s
9200/60000 [===>..........................] - ETA: 1s
11000/60000 [====>.........................] - ETA: 1s
12600/60000 [=====>........................] - ETA: 1s
14200/60000 [======>.......................] - ETA: 1s
15800/60000 [======>.......................] - ETA: 1s
17200/60000 [=======>......................] - ETA: 1s
19200/60000 [========>.....................] - ETA: 1s
21000/60000 [=========>....................] - ETA: 1s
22800/60000 [==========>...................] - ETA: 1s
24600/60000 [===========>..................] - ETA: 1s
26400/60000 [============>.................] - ETA: 1s
28200/60000 [=============>................] - ETA: 1s
30200/60000 [==============>...............] - ETA: 0s
32400/60000 [===============>..............] - ETA: 0s
35000/60000 [================>.............] - ETA: 0s
38000/60000 [==================>...........] - ETA: 0s
40800/60000 [===================>..........] - ETA: 0s
43800/60000 [====================>.........] - ETA: 0s
46200/60000 [======================>.......] - ETA: 0s
47000/60000 [======================>.......] - ETA: 0s
48400/60000 [=======================>......] - ETA: 0s
49600/60000 [=======================>......] - ETA: 0s
51200/60000 [========================>.....] - ETA: 0s
52400/60000 [=========================>....] - ETA: 0s
54200/60000 [==========================>...] - ETA: 0s
56800/60000 [===========================>..] - ETA: 0s
59400/60000 [============================>.] - ETA: 0s
60000/60000 [==============================] - 2s 29us/step
test accuracy: 0.9621833562850952