最简单的深度学习网络模型python实现-识别手写数字

Foreword写在前面的话:

大家好,我是一名刚开始学习AI以及其算法的新手。这篇文章是我在学AI过程中的一些笔记和心得,希望能和同样在学习AI的朋友们分享。由于我的知识有限,文章中可能存在错误或不准确的地方,欢迎大家在评论区提出建议和指正。我非常期待大家的反馈,以便我能不断学习和进步。同时,我也会在文章中注明参考的资料,以示对原作者的尊重。

PS:本帖以记录学习心得和笔记为主,没有其他大博主那么专业,但是简单易懂^-^

本贴的其他相关学习笔记资料可以通过订阅专栏获取,喜欢的小伙伴可以多多点赞+关注呀!后续会 持续更新相关资源的~

本帖旨在分析该代码以及其背后的原理架构,代码并非手搓而成

该代码年代久远(目前尚未找到原作者),如有侵权请联系删除~

代码以及解析注释一并给到代码面板中了,如下图所示:

第一次运行(神经网络模型代码需要多次运行以达到训练的目的,从而提高其判别准确率):

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.models import Sequential

#Readme
#本代码运用多层感知机(MLP, Multi-Layer Perceptron):代码中构建了一个包含两个全连接层的神经网络模型。
# 第一层是 Flatten 层,将输入的 28×28 图像展平为 784 维的向量。
# 第二层是 Dense 层,包含 128 个神经元,激活函数为 ReLU(Rectified Linear Unit)。ReLU 是一种常用的非线性激活函数,能够加速网络的训练并避免梯度消失问题。
# 第三层是输出层,包含 10 个神经元(对应 10 个数字类别),没有显式指定激活函数。
# 2. adam优化算法


(x_train, y_train), (x_test, y_test) = mnist.load_data() #!!!加载MNIST数据集,源于tensorflow服务器
# 对每个像素值进行归一化(将图像数据归一至0~1之间,
x_train = x_train / 255.
x_test = x_test / 255.

# 将标签进行one-hot编码-输出层有10个神经元,因此depth=10
y_train = tf.one_hot(y_train, depth=10)
y_test = tf.one_hot(y_test, depth=10)

# 构建模型
model = Sequential([
    Flatten(input_shape=(28, 28)),
    Dense(128, activation='relu'),
    Dense(10)
])

# 编译模型
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

#损失函数
# 分类交叉熵损失(Categorical Cross-Entropy):由于这是一个多分类问题(10 个数字类别),代码中使用了分类交叉熵损失函数。它用于衡量模型输出的概率分布与真实标签的概率分布之间的差异。

#训练过程
# 前向传播(Forward Propagation):输入数据通过网络逐层传播,最终得到输出。
# 反向传播(Backpropagation):通过计算损失函数的梯度,更新网络的权重,以最小化损失函数。
# 随机梯度下降(SGD)变体:Adam 优化器本质上是一种改进的随机梯度下降方法,用于优化权重更新。

# 训练模型
model.fit(x_train, y_train, epochs=10, batch_size=32)

# 评估模型
acc_val = model.evaluate(x_test, y_test)[1]
print("Test Accuracy: {0}".format(acc_val))

# 预测第一个测试图像的类别
predictions = model.predict(x_test[0].reshape(1, 28, 28))
predicted_class = np.argmax(predictions, axis=1)
print("Predicted class:", predicted_class)

# 显示第一个测试图像
plt.imshow(x_test[0])
plt.show()

在powershell中运行的结果:

实际图片中的数字:

很明显答案错误,说明还需要再次训练降低loss function的值

第二次运行:

可见答案正确,训练完成。

最后,感谢每一位阅读这篇文章的朋友,你们的反馈对我来说非常宝贵。如果有任何问题或建议,请随时告诉我。让我们一起学习和进步吧!如果您喜欢我的内容,别忘了点赞和关注哦,我会定期分享更多有价值的信息。

相关推荐
aGdF8E3gQ6 小时前
【Application Insights】采样率对Function App日志收集的影响和解决方法
python·flask·wpf
zzz_23686 小时前
AI Coding 的稳定性,不能只靠 Prompt:一次 Harness 工程化拆解
人工智能·prompt
ATMQuant6 小时前
以AI量化为生:25.vnpy 4.4升级实战 - 魔改版框架如何安全跟进上游
人工智能·python·量化交易·vnpy
Raas1006 小时前
MAIGateway,魔芋企业级AI网关的FinAPI成本归因设计
大数据·人工智能·网关·api网关·finapi
啾啾Fun6 小时前
【AI原生组织】2-从L0到L6:Agent自治等级与组织成熟度地图
人工智能·ai-native
LaughingZhu6 小时前
Product Hunt 每日热榜 | 2026-08-04
人工智能·经验分享·深度学习·神经网络·产品运营
正经人_x6 小时前
学习日记48:DenseCLIP
学习
阿里云云原生6 小时前
金融级 AI 原生架构:FinXScope 如何解决智能体从 Demo 到生产的“最后一公里”?
人工智能·金融·架构·agentscope·finxscope
蓝速科技6 小时前
蓝速科技 AI 双屏翻译机商务选购与实测避坑指南
人工智能·科技
xlxxy_6 小时前
外部系统调用SAP接口遇到的一些报错
开发语言·数据库·sap·abap