【问题标题】:Keras flow_from_directory class indexKeras flow_from_directory 类索引
【发布时间】:2017-10-04 10:25:12
【问题描述】:

我以前是手动制作的,但现在我使用 flow_from_directory 用我自己的数据训练我的网络。我只有一个问题。当我制作 model.predict() 时,我怎么知道我的预测索引 0 是针对标签类别狗而索引 1 是针对类别猫?

我使用的代码如下。

train_datagen = ImageDataGenerator(
    rescale=1./255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
        train_images_path,  
        target_size=(64, 64),  
        batch_size=batch_size)  


validation_generator = test_datagen.flow_from_directory(
        validate_images_path,
        target_size=(64, 64),
        batch_size=batch_size)
early_stopping = keras.callbacks.EarlyStopping(monitor='val_acc', min_delta=0, patience=3, verbose=1, mode='auto')
history = model.fit_generator(
        train_generator,
        steps_per_epoch=1700,
        epochs=epochs,
        verbose=1,
        callbacks=[early_stopping],
        validation_data=validation_generator,
        validation_steps=196
)

我想知道的是配对图像与真实标签。

谢谢

【问题讨论】:

  • Flow_from 目录是一种方便的方法,您只需传递目录,它就会为 keras 生成正确的表示,从而抽象出您的内部过程,例如将原始像素获取到 numpy 数组、生成标签等。
  • 不知道为什么投反对票。也许谁投反对票可以向我解释这一点。

标签: keras


【解决方案1】:

它非常简单。当你预处理你的数据时,只需用一些特定的整数替换类标签(你可以称之为 id)。因此,当您根据模型的输出计算损失或准确度时,只需将预测与根据整数标签 (id) 的基本事实进行比较。

如果您需要标签文本,您可以从 id(整数)中取回。

【讨论】:

  • 我想你误会了。如果您手动执行此操作,则将图像转换为 numpy 数组等等。这就是你所说的方式。如果您只是将目录传递给 flow_from_directory 它是不同的。我的猜测是您从未使用过 flow_from_directory。
【解决方案2】:

当你收集数据时,你定义了它。没有规则。但是一个简单的检查方法是:

  • 看看你的第一个训练图像是什么,你自己看看:是猫还是狗?
  • 那么看训练Y(结果/类/期望的输出),是[0,1]还是[1,0]?

这将回答您的问题。

要从生成器中获取一个样本,您可以查看以下问题:How to get one value from a generator in Python?

正如Keras documentation 中定义的那样,生成器输出是(输入、目标)的元组

【讨论】:

  • 嗨。感谢您的回答,但这不是 flow_from_directory 的工作方式。我猜你以前没用过?!?!
  • 或者也许有办法从 flow_from_directory 生成器中获取 X 和 Y 值?
  • 我明白了。也许this question 有帮助? (更新了答案)。
  • 输出什么? fit_generator 输出一个 History 对象。根据文档,flow_from_directory 不返回任何内容。
  • 在 keras 文档中。传递给“fit_generator”的生成器必须产生一个带有(输入,目标)的元组。否则,您根本无法训练它。
【解决方案3】:

您可以通过 class_indices 属性获得生成器生成的每个类的索引。

print(validation_generator.class_indices)

简单...

【讨论】:

  • 非常酷!就我而言,它看起来像按字母顺序排列文件夹名称。
  • 这是确定性的吗?每次运行我都会得到相同的订单吗?如果按字母数字排序,不同操作系统上的排序是否相同?
  • 我无法回答,因为我从未玩过 keras agang(自 2017 年以来)。
  • @LeonardFeehan 据记录,它们是按字母数字排序的,所以我想说你可以相信它是确定性的。
猜你喜欢
  • 2018-08-07
  • 2018-06-28
  • 2017-09-05
  • 2021-10-11
  • 1970-01-01
  • 2018-06-30
  • 2018-10-30
  • 2017-06-08
  • 2019-06-06
相关资源
最近更新 更多