手写数字识别代码

复制代码
import pandas as pd
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers
import matplotlib.pyplot as plt
data=np.load('./mnist111.npz')
data.files
x_train,y_train,x_test,y_test=\
data['x_train'],data['y_train'],data['x_test'],data['y_test']
x_train,x_test=x_train/255.0,x_test/255.0
print('训练集样本',x_train.shape)
print('训练集样本',y_train.shape)
print('测试集样本',x_test.shape)
print('测试集样本',y_test.shape)
plt.figure
plt.rcParams['font.sans-serif']=['WenQuanYi Zen Hei']
plt.rcParams['axes.unicode_minus']=False
plt.imshow(x_train[0],cmap=plt.cm.binary)
plt.colorbar()
plt.grid(False)
plt.title('图片里数字是:%d'%y_train[0],size=15)
plt.show()
model=tf.keras.models.Sequential()
model.add(layers.RNN(layers.SimpleRNNCell(100),input_shape=(28,28)))
model.add(layers.Dense(10,activation='softmax'))
model.summary()
model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
history=model.fit(x_train,y_train,epochs=5,validation_data=(x_test,y_test))

plt.plot(history.epoch,history.history.get('loss'),label='loss')
plt.plot(history.epoch,history.history.get('val_loss'),label='val_loss')
plt.legend()
plt.show()
plt.plot(history.epoch,history.history.get('accuracy'),label='acc')
plt.plot(history.epoch,history.history.get('val_accuracy'),label='val_acc')
plt.legend()
plt.show()
model.evaluate(x_test,y_test,verbose=2)
predictions=model.predict(x_test)
print(np.argmax(predictions[0]))
print(y_test[0])

i=4
plt.figure(figsize=(6,3))
plt.subplot(1,2,1)
plt.imshow(x_test[i],cmap=plt.cm.binary)
plt.xlabel('原图片的数字是%d'%y_test[i],color='red',size=15)
plt.subplot(1,2,2)
plt.xticks(range(10),size=12)
my_plot=plt.bar(range(10),predictions[i],color='blue')
plt.ylim([0,1])
plt.show()

代码段拆解

要拆解语句 plt.title('图片里数字是:%d'%y_train[0], size=15) 的语法:

核心知识点

语法成分 作用 示例/说明
plt.title() 设置图表标题的函数 必需参数为标题文本
%d 整数占位符 替换为 y_train[0] 的整数值
% 操作符 将变量插入字符串模板 右侧为单个变量或元组
size=15 设置字体大小(fontsize 的别名) 也可用 fontsize=15
y_train[0] 数据源索引 需确保是整数,否则报错

此语句通过传统字符串格式化动态生成标题,并指定字体大小,适用于快速绘图场景。

长期项目中建议改用 f-string 提升代码可维护性。


1. plt.title() 函数的作用

  • 功能plt.title() 是 Matplotlib 中用于设置图表标题的函数,参数包括标题文本和样式属性(如字体大小、颜色等)。

  • 基本语法

    python 复制代码
    plt.title(label, fontsize=None, color=None, loc=None, **kwargs)

    其中 label 是标题文本,其他参数(如 size)用于调整样式。


2. 字符串格式化部分:'图片里数字是:%d' % y_train[0]

  • %d 的作用
    这是 C 风格格式化占位符,表示将整数插入字符串。%d 会被右侧变量替换(y_train[0] 需为整数)。

  • % 操作符的用法
    % 左侧是字符串模板,右侧是待插入的值(单个变量或元组)。此处 y_train[0] 是一个整数变量,例如:

    python 复制代码
    y_train = [5]  # 示例数据
    title_text = '图片里数字是:%d' % y_train[0]  # 输出:'图片里数字是:5'

    y_train[0] 非整数(如字符串),会触发 TypeError


3. size=15 参数

  • 作用 :设置标题字体大小为 15 磅(等价于 fontsize=15)。
    Matplotlib 中 sizefontsize 的常用别名,属于 **kwargs 参数。
  • 其他样式参数
    类似参数包括 color(颜色)、loc(位置,如 'left')、fontweight(粗细)等。

4. 语句整体解析

  • 执行顺序

    1. 先执行字符串格式化:'图片里数字是:%d' % y_train[0] → 生成最终标题文本(如 '图片里数字是:5')。
    2. 调用 plt.title(),传入格式化后的字符串和 size=15 参数。
  • 等效代码

    python 复制代码
    formatted_title = '图片里数字是:%d' % y_train[0]  # 步骤1:格式化字符串
    plt.title(formatted_title, size=15)               # 步骤2:设置标题

5. 注意事项与常见问题

  • 类型匹配y_train[0] 必须是整数,否则报错。若需兼容浮点数或字符串,可用 %s(但会失去整数格式控制)。

  • 现代格式化替代方案
    推荐使用 f-string(Python 3.6+)或 str.format() 提升可读性:

    python 复制代码
    # f-string 写法
    plt.title(f'图片里数字是:{y_train[0]}', size=15)
  • 多子图场景
    若图表包含多个子图,plt.title() 仅设置当前子图标题;全局标题需用 plt.suptitle()


相关推荐
老百姓懂点AI1 天前
[WASM实战] 插件系统的安全性:智能体来了(西南总部)AI调度官的WebAssembly沙箱与AI agent指挥官的动态加载
人工智能·wasm
多米Domi0111 天前
0x3f 第49天 面向实习的八股背诵第六天 过了一遍JVM的知识点,看了相关视频讲解JVM内存,垃圾清理,买了plus,稍微看了点确定一下方向
jvm·数据结构·python·算法·leetcode
人工智能训练1 天前
【极速部署】Ubuntu24.04+CUDA13.0 玩转 VLLM 0.15.0:预编译 Wheel 包 GPU 版安装全攻略
运维·前端·人工智能·python·ai编程·cuda·vllm
yaoming1681 天前
python性能优化方案研究
python·性能优化
源于花海1 天前
迁移学习相关的期刊和会议
人工智能·机器学习·迁移学习·期刊会议
码云数智-大飞1 天前
使用 Python 高效提取 PDF 中的表格数据并导出为 TXT 或 Excel
python
DisonTangor1 天前
DeepSeek-OCR 2: 视觉因果流
人工智能·开源·aigc·ocr·deepseek
薛定谔的猫19821 天前
二十一、基于 Hugging Face Transformers 实现中文情感分析情感分析
人工智能·自然语言处理·大模型 训练 调优
发哥来了1 天前
《AI视频生成技术原理剖析及金管道·图生视频的应用实践》
人工智能
biuyyyxxx1 天前
Python自动化办公学习笔记(一) 工具安装&教程
笔记·python·学习·自动化