手写数字识别代码

复制代码
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 中 size 是 fontsize 的常用别名,属于 **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()。


相关推荐
老金带你玩AI4 小时前
这几天,我都是拿手机让dot帮我干活
人工智能
7yewh7 小时前
SLAM 三维空间刚体运动(2)
数据结构·人工智能·机器人·嵌入式·slam
小虎AI生活7 小时前
WorkBuddy 模型选型实操:0.03 倍的 Space-Bunny 怎么用、派什么活、避什么坑
人工智能·超级个体·一人公司·青玥ai
ai小陈7 小时前
GPU服务器租用存储验收:检查点写入与磁盘吞吐实战
运维·服务器·人工智能·ai·ssh·gpu算力
微三云马玮均—GEO源码系统 私有化部署7 小时前
消费返物业费:消费+服务趋势的必然产物!
大数据·人工智能·物联网·区块链·生活
明月_清风8 小时前
Muse 登顶 App Store 第一,SDK 直接开源:AI Agent 开始进入下一个阶段
人工智能·后端
言乐68 小时前
HTML视频审核模型
python·django·virtualenv·pygame·tornado
JackSparrow4148 小时前
和AI一起将全部CSDN博文迁移到个人博客站
人工智能·程序人生·ai·github·cloudflare·astro·静态博客
55873 生态系统8 小时前
第 22 篇|社区聊天|55873 文明共建者的日常交流与协作界面
人工智能·区块链·55873全域文明生态体系·55873操作系统·55873社区聊天