MLP实战二:MLP 实现图像数字多分类

任务

实战(二):MLP 实现图像多分类

基于 mnist 数据集,建立 mlp 模型,实现 0-9 数字的十分类 task:

1、实现 mnist 数据载入,可视化图形数字;

2、完成数据预处理:图像数据维度转换与归一化、输出结果格式转换;

3、计算模型在预测数据集的准确率;

4、模型结构:两层隐藏层,每层有 392 个神经元

参考资料

38.42 实战(二)_哔哩哔哩_bilibili

1、载入mnist 数据,可视化图形数字

载入数据

python 复制代码
#load the mnist data
from tensorflow.keras.datasets import mnist
(X_train, y_train),(X_test, y_test) = mnist.load_data()
python 复制代码
print(type(X_train), X_train.shape) 
#<class 'numpy.ndarray'> (60000, 28, 28),训练样本有 60000个,每个都是 28 * 28 像素组成的 Array

可视化部分数据

python 复制代码
#可视化部分数据
img1 = X_train[0] #取第一个数据
%matplotlib inline
from matplotlib import pyplot as plt
fig1 = plt.figure(figsize=(3,3))
plt.imshow(img1)
plt.title(y_train[0])# 标签作为 title
plt.show()

2、数据预处理

图像数据维度转换与归一化

python 复制代码
img1.shape# (28,28), 可以看出是  28 行 28 列
#需要转换成 784列的新的数组
python 复制代码
#format the input data
feature_size = img1.shape[0] * img1.shape[1] # 行数*列数
print(feature_size)# 784
#把原来的数据进行 reshape
X_train_format = X_train.reshape(X_train.shape[0], feature_size)#第一个参数是样本数量
print(X_train_format.shape)# (60000, 784), 60000个样本, 784列

X_test_format = X_test.reshape(X_test.shape[0], feature_size)#第一个参数是样本数量
print(X_test_format.shape)#(10000, 784)
python 复制代码
#归一化:图像数据是 0-255,区间太大,需要归一化到 0-1之间
#normalize the input data
X_train_normal = X_train_format/255
X_test_normal = X_test_format/255
print(X_train_format[0]) #原数据
python 复制代码
print(X_train_normal[0]) #归一化后的数据

输出结果格式转换

python 复制代码
#数据预处理:输出结果也需要进行转换,转换成 0001这样的标签
#format the output data(labels)
from tensorflow.keras.utils import to_categorical
y_train_format = to_categorical(y_train)
y_test_format = to_categorical(y_test)
print(y_train[0])# 5, 第一副图像是 5
print(y_train_format[0])#[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.] # 第 5 个是 1

3、计算模型在预测数据集的准确率

创建 MLP 模型

python 复制代码
# set up the model
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation

mlp =Sequential()
mlp.add(Dense(units = 392, activation = 'sigmoid', input_dim = feature_size))
#第二层有 392 个神经元,input_dim 为一开始的输入数据
mlp.add(Dense(units = 392, activation = 'sigmoid'))# 第三层
mlp.add(Dense(units = 10, activation = 'softmax')) # 输出层为0-9 10个数字
mlp.summary()

配置模型

python 复制代码
#config the model
mlp.compile(loss = 'categorical_crossentropy' , optimizer = 'adam')
#categorial_crossentropy: 这个是用于多分类的损失函数; optimizer:优化方法

训练模型

python 复制代码
#train the model
mlp.fit(X_train_normal, y_train_format, epochs = 10)

评估模型

训练集

python 复制代码
#预测训练集数据
y_train_predict = mlp.predict_classes(X_train_normal)
print(y_train_predict)
python 复制代码
#计算对训练集预测的准确率
from sklearn.metrics import accuracy_score
accuracy_train = accuracy_score(y_train, y_train_predict)
print(accuracy_train)#0.9964833333333334

测试集

python 复制代码
#看下 测试集 的准确率
y_test_predict = mlp.predict_classes(X_test_normal)
accuracy_test = accuracy_score(y_test, y_test_predict)
print(accuracy_test)#0.981, 比较高,说明模型对图片的预测还是比较准确的

展示出图形,看预测结果与实际是否相符

python 复制代码
#选几幅图展示出来,看看预测结果是否一样
img2 = X_test[100] # 随便选择,这里选择第 11 幅图
fig2 = plt.figure(figsize = (3,3))
plt.imshow(img2)
plt.title(y_test_predict[100])
plt.show()#展示的是测试集第 11 张图片的图形 以及 预测的标签

4、图像数字多分类实战总结

1、通过 mlp 模型,实现了基于图像数据的数字自动识别分类;

2、完成了图像的数字化处理与可视化;

3、对 mlp 模型的输入、输出数据格式有了更深的认识,完成了数据预处理与格式转换;

4、建立了结构更为复杂的 mlp 模型

5、mnist 数据集地址:http://yann.lecun.com/exdb/mnist/

相关推荐
昵称是6硬币2 小时前
YOLO26论文精读(逐段解析)
人工智能·深度学习·yolo·目标检测·计算机视觉·yolo26
wwlsm_zql4 小时前
「赤兔」Chitu 框架深度解读(十四):核心算子优化
人工智能·1024程序员节
闲人编程5 小时前
自动化文件管理:分类、重命名和备份
python·microsoft·分类·自动化·备份·重命名·自动化文件分类
青云交6 小时前
Java 大视界 -- Java 大数据在智能农业温室环境调控与作物生长模型构建中的应用
java·机器学习·传感器技术·数据处理·作物生长模型·智能农业·温室环境调控
浣熊-论文指导6 小时前
聚类与Transformer融合的六大创新方向
论文阅读·深度学习·机器学习·transformer·聚类
AKAMAI6 小时前
Fermyon推出全球最快边缘计算平台:WebAssembly先驱携手Akamai云驱动无服务器技术新浪潮
人工智能·云计算·边缘计算
云雾J视界7 小时前
TMS320C6000 VLIW架构并行编程实战:加速AI边缘计算推理性能
人工智能·架构·边缘计算·dsp·vliw·tms320c6000
想ai抽7 小时前
基于AI Agent的数据资产自动化治理实验
人工智能·langchain·embedding
小马过河R8 小时前
AIGC视频生成之Deepseek、百度妙笔组合实战小案例
人工智能·深度学习·计算机视觉·百度·aigc
june-Dai Yi8 小时前
免费的大语言模型API接口
人工智能·语言模型·自然语言处理·chatgpt·api接口