image-processing - 为什么 keras 测试生成器只返回批量大小作为数组形状的长度?
问题描述
这是我的测试生成器代码:
test_generator=test_datagen.flow_from_dataframe(
dataframe=df_test,
directory=img_dir,
x_col="filename",
y_col="label",
batch_size=32,
seed=42,
shuffle=False,
class_mode="categorical",
target_size=(img_size,img_size))
为什么batch_size
创建生成器后参数仍然很重要:
Found 229 validated image filenames belonging to 2 classes.
例如,创建生成器后数组的形状被限制为 32 - 批量大小:
x_test, y_test = test_generator.next()
这是 的形状x_test
,我假设这是包含实际图像数据的数组:
>>> print(x_test.shape)
(32, 224, 224, 3)
这是我将其与预测长度进行比较时的结果:
print(len(x_test)) #32
print(len(y_test)) #32
print(len(pred)) #229
由于大小与y_test
预测大不相同,我很难进行任何类型的比较。与批量大小设置为 32的y_test
直接相关test_generator
。
测试生成器标签似乎具有正确数量的元素:
test_generator.labels
[0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0........
x_test
那么为什么只有32的形状呢?我显然错误地认为它应该是 229,因为有 229 个样本,229 个标签?
非常感谢您的任何建议!
解决方案
正如此处的文档所述,生成器返回的是:
DataFrameIterator 产生 (x, y) 的元组,其中 x 是一个 numpy 数组,其中包含一批形状为 (batch_size, target_size, channels) 的图像,y 是一个对应标签的 numpy 数组。
所以,test_generator
是 a DataFrameIterator
,每次你调用它时,它都会给你一批 shape 的图像(32, 224, 224, 3)
。因此,您错误地认为它应该是 229,因为有 229 个样本。每次它会从 229 个样本中为您提供一批 32 个图像。
推荐阅读
- php - 我需要首先显示最新条目
- python - 无法为 python 3.9 安装 pip3
- image - 如何在 Flutter Web 程序中压缩图像
- docker - Docker Gremlin 客户端无法连接到 gremlin 服务器?
- javascript - 这个 API 设计模式有名字吗?
- javascript - 使用 java 脚本将 onclick 添加到按钮
- ios - 使用 Windows 从 Iphone 6 上的应用中心测试 iOS 应用程序
- matplotlib - 在循环中自定义绘图标签
- ruby-on-rails - Ruby 安装问题 - gem 可执行文件将无法运行
- javascript - 将 JavaScript getElementById 转换为 PHP