TensorFlow初学者:如何用CIFAR10教程代码实现自定义图片分类?
嘿,别慌!作为TensorFlow纯新手,想用CIFAR10教程里的代码给自己的图片分类,其实跟着下面的步骤一步步来,完全能搞定~
第一步:先跑通官方CIFAR10基础代码
首先得确保你的环境能正常运行TensorFlow的CIFAR10模型,这是基础:
- 先安装好TensorFlow:在命令行里输入
pip install tensorflow完成安装 - 找到官方CIFAR10的基础教程代码(直接在TensorFlow的官方文档里搜“CIFAR10”就能找到),把代码复制到Python脚本里,先运行训练部分。等训练完成后,记得用
model.save("cifar10_model.h5")把训练好的模型保存下来——这是你后续分类自己图片的核心工具。
第二步:预处理你的待分类图片
CIFAR10模型是针对32×32像素的RGB图片训练的,所以你的图片必须转换成这个格式:
- 单张图片处理示例(用PIL库,先安装:
pip install pillow):
from PIL import Image import numpy as np # 替换成你的图片路径 img_path = "my_photo.jpg" # 加载图片并转成RGB格式(如果是灰度图也能转成3通道) img = Image.open(img_path).convert("RGB") # 缩放到模型要求的32×32 img = img.resize((32, 32)) # 转成numpy数组,并且归一化(和CIFAR10训练数据的预处理一致) img_array = np.array(img) / 255.0 # 给数组加一个维度——模型接受的是「批量」输入,哪怕只有1张图也要符合格式(形状变成(1, 32, 32, 3)) img_array = np.expand_dims(img_array, axis=0)
特别注意:归一化(除以255)这一步绝对不能少,不然模型预测结果会完全不准!
第三步:加载模型并做分类预测
有了预处理好的图片,就可以让模型干活了:
import tensorflow as tf # 加载你之前保存的模型 model = tf.keras.models.load_model("cifar10_model.h5") # 运行预测 predictions = model.predict(img_array) # 找到概率最高的类别索引 predicted_idx = np.argmax(predictions[0]) # CIFAR10的类别对应表,直接用这个就行 class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck'] # 输出结果 print(f"这张图片预测是:{class_names[predicted_idx]},置信度:{predictions[0][predicted_idx]:.2f}")
第四步:处理多张图片的情况
如果有一堆图片要分类,用循环批量处理就行:
import os # 替换成你的图片文件夹路径 image_folder = "my_images/" class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck'] # 遍历文件夹里的所有图片 for filename in os.listdir(image_folder): # 只处理图片格式的文件 if filename.lower().endswith((".jpg", ".png", ".jpeg")): img_path = os.path.join(image_folder, filename) # 重复单张图片的预处理步骤 img = Image.open(img_path).convert("RGB") img = img.resize((32, 32)) img_array = np.array(img) / 255.0 img_array = np.expand_dims(img_array, axis=0) # 预测时关闭冗余输出(verbose=0) predictions = model.predict(img_array, verbose=0) predicted_idx = np.argmax(predictions[0]) # 打印每张图的结果 print(f"图片 {filename}:{class_names[predicted_idx]}(置信度:{predictions[0][predicted_idx]:.2f})")
新手避坑指南
- 图片路径一定要写对!如果报“找不到文件”的错误,先检查路径是不是绝对路径,或者文件夹/文件名有没有打错
- 如果你的图片是PNG格式(带透明通道),
convert("RGB")会自动去掉透明层,不用额外处理 - 如果训练模型时用了其他预处理方式(比如标准化到[-1,1]),那你的图片也要做同样的操作,不然预测会出错
内容的提问来源于stack exchange,提问作者Mitchell T. Diedrich
相关产品推荐
相关产品推荐

