You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Keras的predict_generator()中获取关联图像名称?

解决方法:先修正shuffle参数,再获取测试图像名称

首先,你遇到的每次预测结果不同的问题,根源在于shuffle参数的取值错误——你传入的是字符串 "false",但Keras的flow_from_directory里的shuffle参数需要的是布尔值False(小写,不带引号)。在Python中,非空字符串会被视为True,所以你的设置其实相当于开启了打乱机制,导致每次运行都会随机选取图片。

先把代码里的shuffle = "false"改成shuffle=False,这样generator就会按目录下的固定顺序读取图片,每次steps=1时都会取第一张图。

接下来,要查看当前测试的图像名称,有两种简单可靠的方法:

方法一:直接通过generator属性定位文件名

flow_from_directory生成的test_batches对象自带filenames属性,它是一个按读取顺序排列的所有测试图片文件名的列表。当你设置steps=1且shuffle=False时,第一次预测的就是列表里的第一个元素:

# 修正shuffle参数为布尔值False
test_batches = ImageDataGenerator(preprocessing_function=preprocess_input).flow_from_directory(
    test_path,
    target_size=(224,224),
    batch_size=1,
    class_mode=None,
    shuffle=False
)

# 获取当前要测试的图片名称
current_image = test_batches.filenames[0]
print(f"当前测试的图片是:{current_image}")

# 执行预测
prediction = model.predict_generator(test_batches, steps=1, verbose=1)
print(np.argmax(prediction))

方法二:迭代generator动态获取当前batch的文件名

如果你后续需要测试多张图片,想要动态获取每次迭代对应的文件名,可以直接用next()方法获取batch数据和对应的文件名:

test_batches = ImageDataGenerator(preprocessing_function=preprocess_input).flow_from_directory(
    test_path,
    target_size=(224,224),
    batch_size=1,
    class_mode=None,
    shuffle=False
)

# 获取一个batch的图片数据与文件名
batch_data, batch_filenames = next(test_batches)
print(f"当前测试的图片是:{batch_filenames[0]}")

# 用该batch执行预测
prediction = model.predict(batch_data, verbose=1)
print(np.argmax(prediction))

这样就能准确知道每次预测的是哪张图片,同时也解决了每次选图不同的问题。

内容的提问来源于stack exchange,提问作者Asymptote

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:55:49