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的值
第二次运行:
可见答案正确,训练完成。
最后,感谢每一位阅读这篇文章的朋友,你们的反馈对我来说非常宝贵。如果有任何问题或建议,请随时告诉我。让我们一起学习和进步吧!如果您喜欢我的内容,别忘了点赞和关注哦,我会定期分享更多有价值的信息。