使用MNIST数据集进行图像分类(机器学习的“Hello World”练习)
本次练习的目标是训练深度学习模型对手写数字进行分类
import matplotlib.pyplot as plt
from tensorflow.keras.datasets import mnist # 导入mnist数据集
import matplotlib.pyplot as plt #使用matplotlib
import tensorflow.keras as keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# ——————————————————————————————————————————————Mnist数据集测试—————————————————————————————————————————————————————————
(x_train,y_train),(x_test,y_test) = mnist.load_data()
# a = x_train.shape # 输出x_train的数量和尺寸
# b = x_test.shape # 输出x_test的数量和尺寸
# c = x_test.dtype # 输出x_test的类型
# d = x_test.min() # 输出x_test的最小灰度值
# e = x_test.max() # 输出x_test的最大灰度值
# f = x_test[0] # 输出x_test第0个数据灰度值的数组
# print() # 输出你上部分想看的数据属性
#
# # 使用matplotlib模块显示数据集中灰度图像
# image = x_train[0]
# plt.imshow(image,cmap="gray")
# plt.show()
# g = y_train[0] # 输出x_train的标签
# print(g)
# #
# ——————————————————————————————————————————————展平图像数据—————————————————————————————————————————————————————————
# 使用reshape方法将二维图片展连续一维数组
x_train = x_train.reshape(60000,784)
x_test = x_test.reshape(10000,784)
# print(x_test[0]) # 已经展开为一维数组
# ——————————————————————————————————————————————数据归一化—————————————————————————————————————————————————————————
# 深度学习模型在处理0至1之间的数字会更ok(原因我也不知道呜呜)所以把0到255的像素值统统除以255进行归一化
x_train = x_train/255
x_test = x_test/255
# 现在我们就能看见灰度值都介于0和1之间了
x_train.dtype
x_train.min()
x_train.max()
# ——————————————————————————————————————————————对标签多分类编码—————————————————————————————————————————————————————————
# 图像的标签是0到9的整数,由于这些值是一个数值范围,所以需要分类编码,具体的自己查查
num_categories = 10
y_train = keras.utils.to_categorical(y_train,num_categories)
y_test = keras.utils.to_categorical(y_test,num_categories)
# print(y_train[0:9])
# ——————————————————————————————————————————————创建模型—————————————————————————————————————————————————————————
# 输入层,隐藏层,输出层
# 1,模型实例化
model = Sequential()
# 2,创建输入层
model.add(Dense(units=512,activation='relu',input_shape=(784,)))
# 3,创建隐藏层
model.add(Dense(units=512,activation='relu'))
# 4,创建输出层
model.add(Dense(units=10,activation='softmax'))
# ——————————————————————————————————————————————总结模型—————————————————————————————————————————————————————————
# model.summary() # 用来打印出可读的模型摘要
# ——————————————————————————————————————————————编译模型—————————————————————————————————————————————————————————
model.compile(loss='categorical_crossentropy',metrics=['accuracy'])
# # ——————————————————————————————————————————————训练模型—————————————————————————————————————————————————————————
# fit方法需要的参数 (1,训练数据及其标签,2,训练次数epochs. 3,验证数据)
history = model.fit(x_train,y_train,
epochs=5,
verbose=1,
validation_data=(x_test,y_test))