手写数字识别代码

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


相关推荐
Mxsoft61922 分钟前
电力设备接触电阻在线监测与深度学习驱动的异常预警技术
人工智能·深度学习·智能电视
天天爱吃肉821822 分钟前
深入理解电流传感器相位补偿:原理、方法与典型应用
人工智能·嵌入式硬件·汽车
闲人编程24 分钟前
构建一个基于Flask的URL书签管理工具
后端·python·flask·url·codecapsule·书签管理
2501_9335090728 分钟前
无锡制造企税惠防错指南:知了问账帮守政策红利线
大数据·人工智能·微信小程序
song85460113430 分钟前
锁的初步学习
开发语言·python·学习
Dcs43 分钟前
提升 Python 性能的 10 个智能技巧
python
算家计算1 小时前
AI破解肝移植困局!斯坦福发布最新AI研究,利用LightGBM模型优化肝移植资源利用效率
人工智能·资讯
用户3459474113611 小时前
Agent智能体全集系列课件与视频
人工智能
新加坡内哥谈技术1 小时前
麻省理工学院未来研发更高温超导体打开了新路径
人工智能
深蓝电商API1 小时前
0 基础入门爬虫:Python+requests 环境搭建保姆级教程
开发语言·爬虫·python