🧠 什么是 MNIST 数据集?
MNIST 是机器学习领域经典的 手写数字识别 数据集,包含 60,000 张训练图像和 10,000 张测试图像。每张图像为 28x28 像素的灰度图,标签为 0-9 的数字。
🤖 多层感知机(MLP)简介
MLP 是一种全连接神经网络,通过多层非线性变换实现特征学习。其核心结构包括:
- 输入层:接收原始像素数据
- 隐藏层:通过激活函数(如 ReLU)提取抽象特征
- 输出层:使用 softmax 函数输出概率分布
💡 想更深入了解神经网络基础?可参考 神经网络入门教程
🛠 实现步骤(Python 示例)
数据加载
使用tensorflow.keras.datasets.mnist
加载数据from tensorflow.keras.datasets import mnist (x_train, y_train), (x_test, y_test) = mnist.load_data()
数据预处理
- 归一化:
x_train = x_train / 255.0
- 展平图像:
x_train = x_train.reshape(-1, 28*28)
- One-hot 编码:
y_train = tf.keras.utils.to_categorical(y_train, 10)
- 归一化:
构建 MLP 模型
model = tf.keras.Sequential([ tf.keras.layers.Dense(512, activation='relu', input_shape=(784,)), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ])
模型编译与训练
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=10, batch_size=128, validation_split=0.1)
📈 结果分析
- 训练准确率:通常可达 98% 以上
- 测试准确率:约 97-98%(取决于超参数调整)
- 可视化建议:可使用
matplotlib
显示混淆矩阵或特征图
🔄 扩展实验
尝试以下改进方案:
- 增加隐藏层节点数(如 1024)
- 添加 Batch Normalization 层
- 使用不同优化器(如 SGD + 余弦退火)
- 尝试 CNN 模型对比效果
🚀 更多深度学习实战案例?可访问 深度学习项目集