使用tensorflow载入模型
加载一个预训练的 MNIST 模型。随机生成 5 张图像(模拟 MNIST 图像)。对每张图像进行预测,获取预测结果。绘制图像和预测结果,并将图像保存到指定文件夹中。
·
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import os
# 1. 加载模型
model = tf.keras.models.load_model("mnist_model.keras")
# 2. 创建保存图片的文件夹(如果不存在)
save_dir = "predictions" # 指定保存目录
os.makedirs(save_dir, exist_ok=True) # 自动创建文件夹
# 3. 模拟生成测试图像并保存预测结果
num_samples = 5 # 生成5张测试图
for i in range(num_samples):
# 生成随机图像(模拟MNIST格式)
new_image = np.random.randint(0, 255, size=(28, 28), dtype=np.uint8)
# 预处理
processed_image = new_image.astype("float32") / 255.0
processed_image = processed_image.reshape(1, 784)
print(processed_image)
# 预测
predictions = model.predict(processed_image, verbose=0) # 静默模式
predicted_class = np.argmax(predictions[0])
# 创建画布并绘制图像
plt.figure(figsize=(3, 3))
plt.imshow(new_image, cmap="gray")
plt.title(f"Predicted: {predicted_class}", fontsize=10)
plt.axis("off")
# 保存图片(文件名包含预测结果和序号)
filename = os.path.join(save_dir, f"pred_{i}_digit_{predicted_class}.png")
plt.savefig(filename, bbox_inches="tight", dpi=100) # 调整DPI和边距
plt.close() # 关闭当前画布,避免内存泄漏
print(f"已保存 {num_samples} 张图片到文件夹 {save_dir}")
这段代码的主要目的是使用预训练的 MNIST 手写数字识别模型(mnist_model.keras),生成一些模拟的图像,进行预测,并将预测结果和图像保存为 PNG 文件。
1. 导入必要的库
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import os
tensorflow:用于加载训练好的模型,并进行预测。numpy:用于生成模拟的图像数据,并进行处理(如归一化)。matplotlib.pyplot:用于可视化图像,将预测结果展示为图像。os:用于处理文件和文件夹,确保保存路径存在。
2. 加载预训练的模型
model = tf.keras.models.load_model("mnist_model.keras")
tf.keras.models.load_model("mnist_model.keras"):加载已经训练好的模型,"mnist_model.keras"是模型文件的路径。假设该模型已经训练好了MNIST数据集上的数字分类任务。
3. 创建保存预测结果图片的文件夹(如果文件夹不存在)
save_dir = "predictions" # 指定保存目录
os.makedirs(save_dir, exist_ok=True) # 自动创建文件夹
save_dir = "predictions":定义保存预测结果的文件夹路径。os.makedirs(save_dir, exist_ok=True):如果predictions文件夹不存在,则会自动创建。exist_ok=True参数确保如果文件夹已经存在不会报错。
4. 模拟生成测试图像并保存预测结果
num_samples = 5 # 生成5张测试图
for i in range(num_samples):
num_samples = 5:定义生成的测试图像数量为 5。- 使用
for循环生成每张测试图像并进行处理。
生成模拟图像
new_image = np.random.randint(0, 255, size=(28, 28), dtype=np.uint8)
np.random.randint(0, 255, size=(28, 28), dtype=np.uint8):生成一个 28x28 的随机图像,像素值在 0 到 255 之间,模拟一个手写数字的图像。图像的形状和大小与 MNIST 数据集中的图像一致。
预处理图像
processed_image = new_image.astype("float32") / 255.0
processed_image = processed_image.reshape(1, 784)
new_image.astype("float32") / 255.0:将生成的图像转换为浮点类型并归一化到 [0, 1] 之间,适应神经网络的输入格式。processed_image.reshape(1, 784):将图像从 28x28 的二维数组转化为 784 长度的一维数组,这是神经网络期望的输入形状(784 = 28 * 28)。
进行预测
predictions = model.predict(processed_image, verbose=0) # 静默模式
predicted_class = np.argmax(predictions[0])
model.predict(processed_image, verbose=0):将预处理后的图像传入模型进行预测,verbose=0表示静默模式,不显示进度。np.argmax(predictions[0]):predictions是一个包含每个类的预测概率的数组,np.argmax用来返回概率最高的类索引,即模型预测的数字类别。
绘制图像并保存
plt.figure(figsize=(3, 3))
plt.imshow(new_image, cmap="gray")
plt.title(f"Predicted: {predicted_class}", fontsize=10)
plt.axis("off")
plt.figure(figsize=(3, 3)):创建一个大小为 3x3 英寸的图像画布。plt.imshow(new_image, cmap="gray"):显示生成的随机图像,并使用灰度色彩映射(cmap="gray")。plt.title(f"Predicted: {predicted_class}", fontsize=10):为图像添加标题,显示预测的数字类别。plt.axis("off"):去除坐标轴,专注于图像本身。
保存图像
filename = os.path.join(save_dir, f"pred_{i}_digit_{predicted_class}.png")
plt.savefig(filename, bbox_inches="tight", dpi=100) # 调整DPI和边距
plt.close() # 关闭当前画布,避免内存泄漏
filename = os.path.join(save_dir, f"pred_{i}_digit_{predicted_class}.png"):根据预测的类别和索引生成文件名,保存到predictions文件夹中。plt.savefig(filename, bbox_inches="tight", dpi=100):保存图像为 PNG 文件,bbox_inches="tight"确保图像周围没有多余的空白,dpi=100设置图像分辨率。plt.close():关闭当前画布,避免内存泄漏。
5. 打印保存结果
print(f"已保存 {num_samples} 张图片到文件夹 {save_dir}")
- 这一行代码在所有图像保存完成后输出消息,告诉用户保存了多少张图片到指定文件夹。
总结
这段代码的核心作用是:
- 加载一个预训练的 MNIST 模型。
- 随机生成 5 张图像(模拟 MNIST 图像)。
- 对每张图像进行预测,获取预测结果。
- 绘制图像和预测结果,并将图像保存到指定文件夹中。
更多推荐

所有评论(0)