keras实现手写字体识别

1 本次使用的keras基础模块

  1. losses损失函数
  2. optimizers优化目标函数,比如SGD
  3. datasets常用数据集,比如mnist
  4. models序贯模型,比如Sequential
  5. layers神经网络中的层,比如全连接层Dense
  6. activations激活函数

2 手写体识别

import keras # 导入Keras
from keras.datasets import mnist # 从keras中导入mnist数据集
from keras.models import Sequential # 导入序贯模型
from keras.layers import Dense # 导入全连接层
from keras.optimizers import SGD # 导入优化函数
(x_train, y_train), (x_test, y_test) = mnist.load_data() # 下载mnist数据集
print(x_train.shape,y_train.shape)
print(x_test.shape,y_test.shape)
import matplotlib.pyplot as plt # 导入可视化的包
im = plt.imshow(x_train[0],cmap='gray')

输出结果: 60000张28*28的单通道灰度图
在这里插入图片描述

plt.show()
print (y_train[0])

输出结果:第一个训练集的样子,一个手写的数字5
keras实现手写字体识别_第1张图片
在这里插入图片描述

x_train = x_train.reshape(60000,784) # 将图片摊平,变成向量
x_test = x_test.reshape(10000,784) # 对测试集进行同样的处理
print(x_train.shape)
print(x_test.shape)

输出结果:
在这里插入图片描述

3 对数据进行归一化处理

这里直接将数据除以255

x_train = x_train / 255
x_test = x_test / 255

4 对y标签进行处理,5 --> [ 0, 0, 0, 0, 0,1, 0, 0, 0, 0] ,使用keras的utils工具集中的函数可以做到

y_train = keras.utils.to_categorical(y_train,10)
y_test = keras.utils.to_categorical(y_test,10)

5 构建模型

model = Sequential() # 构建一个空的序贯模型
# 添加神经网络层
model.add(Dense(512,activation='relu',input_shape=(784,)))
model.add(Dense(256,activation='relu'))
model.add(Dense(10,activation='softmax'))
model.summary()

输出结果:第一层和第二层用relu激活函数输出,第三层用softmax函数输出
keras实现手写字体识别_第2张图片

6 将神经网络进行编译

model.compile(optimizer=SGD(),loss='categorical_crossentropy',metrics=['accuracy'])

7 模型的训练

model.fit(x_train,y_train,batch_size=64,epochs=5,validation_data=(x_test,y_test)) # 此处直接将测试集用作了验证集

在这里插入图片描述

8 模型评价

score = model.evaluate(x_test,y_test)
print("loss:",score[0])
print("accu:",score[1])

输出结果:精确度达到94%
在这里插入图片描述

你可能感兴趣的:(实验报告)