4

我正在使用 ImageDataGenerator 来增强我的图像。我需要从生成器中获取 y 标签。

示例:我有 10 个训练图像,7 个是标签 0,3 个是标签 1。我想将训练集大小增加到 100。

total_training_images = 100 total_val_images = 50

model.fit_generator(
    train_generator,
    steps_per_epoch= total_training_images // batch_size,
    epochs=epochs,
    validation_data=validation_generator,
    validation_steps= total_val_images // batch_size)

据我了解,这会在每个 epoch 的 100 个训练图像上训练一个模型,每个图像都会根据我的数据生成器以某种方式进行增强,然后在 50 个图像上进行验证。

如果我这样做train_generator.classes,我会得到一个输出 [0,0,0,0,0,0,0,1,1,1]。这对应于我的标签 0 的 7 个图像和标签 1 的 3 个图像。

对于这 100 张新图像,我如何获得 y 标签?这是否意味着当我将其增加到 100 张图像时,我的新train_generator标签是相同的,但重复了 10 次?基本上np.append(train_generator.classes)10倍?

如果有帮助,我正在关注本教程: https ://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html

4

2 回答 2

11

标签生成为带有图像的单热编码。希望这会有所帮助!

training_set.class_indices

from keras.preprocessing import image
import matplotlib.pyplot as plt

x,y = train_generator.next()
for i in range(0,3):
    image = x[i]
    label = y[i]
    print (label)
    plt.imshow(image)
    plt.show()
于 2017-12-29T11:29:32.607 回答
1

根据您对发电机的说法,是的。

它将为每个增强图像复制相同的标签。(否则模型将无法正确训练)。

检查生成器输出内容的一种简单方法是获取生成的内容:

X,Y = train_generator.next() #or next(train_generator)

请记住,这会将生成器置于产生第二个元素的位置,而不是第一个元素。(这将使 fit 方法从第二个元素开始)。

于 2017-09-01T14:36:58.053 回答