TensorFlow-MNIST手写数字分类

发布于:2025-03-11 ⋅ 阅读:(17) ⋅ 点赞:(0)

TensorFlow 是一个功能强大的深度学习框架,可以用来构建、训练和部署机器学习模型。主要作用于:
构建神经网络模型(回归、分类、生成模型等)。
进行数值计算,并提供 GPU 加速。
实现自动梯度求导(如反向传播训练)。
应用机器学习模型进行预测。

  1. 数据准备
from tensorflow.keras.datasets import mnist
# 加载数据集(已划分为训练集和测试集)
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 数据预处理:像素值归一化到 0~1 之间,并调整张量形状
x_train = x_train / 255.0
x_test = x_test / 255.0
  1. 构建模型
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten

# 定义一个简单神经网络模型
model = Sequential([
    Flatten(input_shape=(28, 28)),  # 将 28x28 的图像展平为向量
    Dense(128, activation='relu'),  # 一个全连接层,128 个神经元,激活函数为 ReLU
    Dense(10, activation='softmax') # 输出层,10 类,用 softmax 输出概率分布
])
  1. 编译模型
model.compile(
    optimizer='adam',  # Adam 优化器
    loss='sparse_categorical_crossentropy',  # 损失函数
    metrics=['accuracy']  # 评价指标
)
  1. 训练模型
# 使用训练集训练模型
model.fit(x_train, y_train, epochs=5, batch_size=32)
  1. 模型评估
# 在测试集上评估模型
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print("\n测试集准确率:", test_acc)
  1. 模型预测
import numpy as np

# 从测试集中取一张图片
sample_image = x_test[0]
sample_image = np.expand_dims(sample_image, axis=0)  # 调整形状为 [1, 28, 28]

# 使用模型进行预测
predictions = model.predict(sample_image)
predicted_label = np.argmax(predictions)

print(f"预测结果:{predicted_label}")

可视化

  1. 使用 Matplotlib 查看图像数据
import matplotlib.pyplot as plt

# 显示 MNIST 数据集中的一个样本
plt.imshow(x_train[0], cmap='gray')
plt.title(f"标签:{y_train[0]}")
plt.show()
  1. 渲染训练曲线
# 绘制训练曲线(损失或准确性)
history = model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test))

# 绘制损失曲线
plt.plot(history.history['loss'], label='训练损失')
plt.plot(history.history['val_loss'], label='验证损失')
plt.title("损失曲线")
plt.xlabel("Epochs")
plt.ylabel("Loss")
plt.legend()
plt.show()

TensorFlow 提供了许多高级功能,可以进一步扩展模型的能力:

卷积神经网络(CNN): 建立图像识别模型。
循环神经网络(RNN, LSTM): 构建时间序列模型或自然语言处理模型。
分布式训练: 使用多 GPU 节点训练大规模模型。
导出模型: 保存模型并加载供生产环境的预测使用:
model.save('my_model.h5')  # 保存模型
new_model = tf.keras.models.load_model('my_model.h5')  # 加载模型