多层感知机(Muti-Layer perceptron)实现图像多分类
目标:
实现基于图像数据的数字自动识别分类
基于minist数据集, 建立基本的神经网络模型, 实现0-9数字的十分类,
模型训练基本流程
1.数据收集导入---keras内置的minist数据集
2.数据基本处理---数据可视化,缺失值/异常值处理,数据分割,输出格式转换
3.特征工程---特征转换:数据维度转换, 特征预处理:归一化
4.模型训练---
模型构建:多层感知器,
层数填充:[392:sigmoid, 392:sigmoid, 10:softmax],
编译模型:
损失函数:categorical_crossentropy,多分类交叉熵, 常与softmax激活函数一起使用
扩展: 相应的, binary_crossentropy二分类交叉熵常与sigmoid结合使用
优化算法:adam,可以替代传统随机梯度下降算法的一阶优化算法
5.模型评估与预测
选择合适评估指标:计算准确率
利用训练和测试集分别进行预测和评估
代码实现
对图像数字进行识别和分类
############################################################
# 1.导入keras内置数据集minist, 有点sklearn的既视感呀
from keras.datasets import mnist
(x_train, y_train),(x_test, y_test)=mnist.load_data()
print(type(x_train), x_train.shape) # 训练集的特征值是一个numpy数组, 三维数据, 有6w个样本, 每个图像为28px*28px
###########################################################################
# 2.数据的基本处理
# 缺失值/异常值处理, 但因为是keras内置的数据集, 不存在缺失值和异常值
# 数据可视化
import matplotlib.pyplot as plt
fig1=plt.figure(figsize=(2,2))
imgX=x_train[0]
plt.imshow(imgX)
plt.title(y_train[0])
plt.show()
# 输出格式转换
from keras.utils import to_categorical
y_train_format = to_categorical(y_train)
y_test_format= to_categorical(y_test)
print(y_train_format[5])
#####################################################################################
# 3.特征工程
# 特征转换--对数据特征值进行维度转换, 将28*28转化为1*784
feature_size=imgX.shape[0]*imgX.shape[1]
x_train_conform=x_train.reshape(x_train.shape[0], feature_size)
x_test_conform =x_test.reshape(x_test.shape[0], feature_size)
print(x_train_conform.shape)
# 特征预处理---归一化
print(x_train_conform[0]) # 归一化之前
x_train_normal = x_train_conform/255
x_test_normal= x_test_conform/255
print(x_train_normal[0])
#########################################################################################
# 4.模型训练
# 模型框架选择
from keras.models import Sequential
mlp=Sequential()
# 模型填充
from keras.layers import Dense, Activation
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.summary()
# 模型编译
mlp.compile(optimizer='adam', loss='categorical_crossentropy')
# 模型训练
mlp.fit(x_train_normal,y_train_format, epochs=10) # 当数据集过大时候, 迭代次数不宜过大, 计算成本太大
####################################################################################
# 5.模型预测和评估
# 利用训练值进行
# 预测
import numpy as np
y_train_pre_pro = mlp.predict(x_train_normal)
y_train_pre=np.argmax(y_train_pre_pro, axis=1)
print(y_train_pre)
# 评估
from sklearn.metrics import accuracy_score
accuracy_train=accuracy_score(y_train, y_train_pre)
print(accuracy_train)
# 利用测试值进行预测和评估
# 预测
y_test_predict_pro=mlp.predict(x_test_normal)
y_test_predict = np.argmax(y_test_predict_pro, axis=1)
print(y_test_predict)
# 评估
accuracy_test=accuracy_score(y_test, y_test_predict)
print(accuracy_test)
###############################################实测环节
# 进入实际测试环节
fig2=plt.figure(figsize=(2,2))
img0=x_test[128]
plt.imshow(img0)
plt.title(y_test_predict[128])
plt.show()
数据集下载链接:
推荐下载: 直接使用内置的数据集不香吗?
1.官网下载:
http://yann.lecun.com/exdb/mnist/
2.谷歌下载(内置数据集的下载方式):
https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
3.百度网盘下载:
链接:https://pan.baidu.com/s/1dwZkBrbsWfLRoUG3OsY8ag
提取码:tt8d
923

被折叠的 条评论
为什么被折叠?



