import tensorflow as tf
from tensorflow.keras import datasets, layers, models

1. 加载数据集 (MNIST 手写数字)

(x_train, y_train), (x_test, y_test) = datasets.mnist.load_data()

2. 数据预处理

x_train = x_train.reshape((-1, 28, 28, 1)).astype("float32") / 255.0 # 加通道维度 & 归一化
x_test = x_test.reshape((-1, 28, 28, 1)).astype("float32") / 255.0

3. 建立 CNN 模型

model = models.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)), # 卷积层
layers.MaxPooling2D((2, 2)), # 池化层
layers.Conv2D(64, (3, 3), activation='relu'), # 再来一层卷积
layers.MaxPooling2D((2, 2)),
layers.Flatten(), # 拉平成一维
layers.Dense(64, activation='relu'), # 全连接层
layers.Dense(10, activation='softmax') # 输出10类(0-9)
])

4. 编译模型

model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])

5. 训练模型

model.fit(x_train, y_train, epochs=3, validation_data=(x_test, y_test))

6. 评估模型

test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print(f"测试集准确率: {test_acc:.4f}")

7. 预测

import numpy as np
import matplotlib.pyplot as plt

sample = x_test[0] # 取一张图片
plt.imshow(sample.reshape(28,28), cmap="gray")
plt.show()

pred = model.predict(np.expand_dims(sample, axis=0))
print("预测结果:", pred.argmax())

 

 

 


import tensorflow as tf
from tensorflow.keras import datasets, layers, models

👉 请来帮手:

  • tensorflow:深度学习的“大脑框架”。
  • datasets:自带一些常用数据集(比如手写数字)。
  • layers:神经网络的“积木块”(卷积层、池化层、全连接层等)。
  • models:用来把积木块拼成完整的网络。

# 1. 加载数据集 (MNIST 手写数字)
(x_train, y_train), (x_test, y_test) = datasets.mnist.load_data()

👉 从 datasets 里拿出 MNIST 数据集:

  • x_train:训练图片(60000 张,28×28 灰度图)。
  • y_train:训练标签(每张图对应的数字 0–9)。
  • x_test:测试图片(10000 张)。
  • y_test:测试标签。
    就像拿到一本“手写数字练习册”,前面用来教 AI,后面用来考试。

# 2. 数据预处理
x_train = x_train.reshape((-1, 28, 28, 1)).astype("float32") / 255.0
x_test = x_test.reshape((-1, 28, 28, 1)).astype("float32") / 255.0

👉 数据加工:

  • .reshape((-1, 28, 28, 1)):给图片加一个“通道维度”(最后的 1 表示灰度图像)。
  • .astype("float32"):把数据转成浮点数,方便计算。
  • / 255.0:把像素从 0~255 压缩到 0~1,让模型更容易学。
    就好比给学生先把图片剪好、排好格式。

# 3. 建立 CNN 模型
model = models.Sequential([
    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),  # 卷积层
    layers.MaxPooling2D((2, 2)),                                            # 池化层
    layers.Conv2D(64, (3, 3), activation='relu'),                           # 再来一层卷积
    layers.MaxPooling2D((2, 2)),
    layers.Flatten(),                                                       # 拉平成一维
    layers.Dense(64, activation='relu'),                                    # 全连接层
    layers.Dense(10, activation='softmax')                                  # 输出10类(0-9)
])

👉 搭建大脑:

  • Sequential:一层层往下堆,像乐高积木。
  • Conv2D(32, (3,3), ...):卷积层,32 个小滤镜,每个滤镜大小 3×3,用来找图片里的小特征(边、角)。
  • MaxPooling2D((2,2)):池化层,把图缩小一半,减少计算。
  • 再加一层卷积 + 池化:让模型学更复杂的形状。
  • Flatten():把二维图片摊平成一维数组,方便送到全连接层。
  • Dense(64, activation='relu'):全连接层,64 个神经元,负责综合特征。
  • Dense(10, activation='softmax'):输出层,10 个结果,对应数字 0–9,每个数是概率。

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

👉 告诉模型怎么玩:

  • optimizer='adam':聪明的调参工人,自动调整学习速度。
  • loss='sparse_categorical_crossentropy':计算预测和正确答案差多少,专门用于“分类问题”。
  • metrics=['accuracy']:额外统计准确率。

# 5. 训练模型
model.fit(x_train, y_train, epochs=3, validation_data=(x_test, y_test))

👉 开始上课:

  • fit 就是“训练”。
  • epochs=3:重复学三遍。
  • validation_data=(x_test, y_test):边学边拿测试集考一考,防止死记硬背。

# 6. 评估模型
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print(f"测试集准确率: {test_acc:.4f}")

👉 期末考试:

  • evaluate:用测试集打分。
  • test_acc:就是最终的考试分数(准确率)。

# 7. 预测
import numpy as np
import matplotlib.pyplot as plt

sample = x_test[0]  # 取一张图片
plt.imshow(sample.reshape(28,28), cmap="gray")
plt.show()

pred = model.predict(np.expand_dims(sample, axis=0))
print("预测结果:", pred.argmax())

👉 随机考一道题:

  • x_test[0]:拿第一张测试图片。
  • plt.imshow(...):显示出来。
  • np.expand_dims(sample, axis=0):加一个“批次维度”,因为模型习惯一批一批算。
  • model.predict(...):让模型算答案。
  • pred.argmax():找出概率最大的数字,就是预测结果。

✅ 总结:
这段代码就是一个“AI 学生学数学”的故事:

  1. 给它看很多手写数字(教材)。
  2. 搭建一个“眼睛+大脑”的结构(CNN)。
  3. 训练它,让它学会区分数字。
  4. 考试看看成绩。
  5. 随便抽一张图,让它答题。

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐