手写数字识别代码

复制代码
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()


相关推荐
奈斯先生Vector10 分钟前
从 127.0.0.1:3080 到插件运行时:DeepSeek Harness 远程开发与版本治理实战
linux·运维·人工智能·ubuntu·aigc
joinwell5213 分钟前
AI Agent 的技能不是工具权限:为什么“会怎么做”和“允许做什么”必须分开?
人工智能
IT_陈寒18 分钟前
Vite动态导入差点让我秃头,原来问题出在这
前端·人工智能·后端
luckystar513~21 分钟前
自己动手写Agent Harness【agent tools】:给它装手和眼睛(工具注册与执行流水线)
人工智能
草莓橙子碗24 分钟前
Claude 使用指南
开发语言·python
工具分享33 分钟前
陪跑跟品爆单AI选品助手,高效跟品会赔本吗?
人工智能·python
COOLMO研究AI1 小时前
Python 如何实现 AI API 的提示词(Prompt)版本管理与热更新
人工智能·python·prompt
官乐1 小时前
AI面试指南(多agent开发流程)
人工智能·面试·职场和发展
学习zhao极致it1 小时前
AI量化交易训练营(完结)
人工智能
老郑聊AI业财智造1 小时前
Transformer 技术架构与源码分析
人工智能·python·深度学习·语言模型·架构·transformer·软件工程