手写数字识别代码

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


相关推荐
工藤学编程11 分钟前
零基础学AI大模型之AI大模型常见概念
人工智能
ACEEE122212 分钟前
Stanford CS336 | Assignment 2 - FlashAttention-v2 Pytorch & Triotn实现
人工智能·pytorch·python·深度学习·机器学习·nlp·transformer
金井PRATHAMA43 分钟前
认知语义学中的象似性对人工智能自然语言处理深层语义分析的影响与启示
人工智能·自然语言处理·知识图谱
陈敬雷-充电了么-CEO兼CTO44 分钟前
突破多模态极限!InstructBLIP携指令微调革新视觉语言模型,X-InstructBLIP实现跨模态推理新高度
人工智能·自然语言处理·chatgpt·blip·clip·多模态大模型·gpt-5
iChochy1 小时前
[开源免费] iGTTS(Gemini TTS) 文本转语音(TTS)的命令行工具。
python·tts·gemini
TwoAI1 小时前
Scikit-learn:从零开始构建你的第一个机器学习模型
python·机器学习·scikit-learn
跟橙姐学代码1 小时前
Python里的“管家婆”:带你玩转os库的所有神操作
前端·python·ipython
倔强青铜三1 小时前
最强Python Web框架到底是谁?
人工智能·python·面试
ZeroNews内网穿透1 小时前
企业远程访问方案选择:何时选内网穿透,何时需要反向代理?
运维·服务器·网络·python·安全
倔强青铜三1 小时前
苦练Python第45天:使用open函数读取文件内容
人工智能·python·面试