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/

相关推荐
算家计算4 分钟前
字节开源代码模型——Seed-Coder 本地部署教程,模型自驱动数据筛选,让每行代码都精准落位!
人工智能·开源
伪_装11 分钟前
大语言模型(LLM)面试问题集
人工智能·语言模型·自然语言处理
gs8014018 分钟前
Tavily 技术详解:为大模型提供实时搜索增强的利器
人工智能·rag
music&movie32 分钟前
算法工程师认知水平要求总结
人工智能·算法
量子位1 小时前
苹果炮轰推理模型全是假思考!4 个游戏戳破神话,o3/DeepSeek 高难度全崩溃
人工智能·deepseek
黑鹿0221 小时前
机器学习基础(四) 决策树
人工智能·决策树·机器学习
Fxrain1 小时前
[深度学习]搭建开发平台及Tensor基础
人工智能·深度学习
szxinmai主板定制专家1 小时前
【飞腾AI加固服务器】全国产化飞腾+昇腾310+PCIe Switch的AI大模型服务器解决方案
运维·服务器·arm开发·人工智能·fpga开发
laocui11 小时前
Σ∆ 数字滤波
人工智能·算法
大鹏的NLP博客1 小时前
基于 Transformer robert的情感分类任务实践总结之二——R-Drop
分类·transformer·r-dop