Keras:如何在ImageDataGenerator中使用predict_generator?

Mar*_*ldt 14 python machine-learning generator deep-learning keras

我对Keras很新.我训练了一个模型,并希望预测存储在子文件夹中的一些图像(比如用于训练).为了测试,我想预测7个类(子文件夹)中的2个图像.下面的test_generator可以看到14张图片,但我得到了196张预测.哪里出错了?非常感谢!

test_datagen = ImageDataGenerator(rescale=1./255)

test_generator = test_datagen.flow_from_directory(
        test_dir,
        target_size=(200, 200),
        color_mode="rgb",
        shuffle = "false",
        class_mode='categorical')

filenames = test_generator.filenames
nb_samples = len(filenames)

predict = model.predict_generator(test_generator,nb_samples)
Run Code Online (Sandbox Code Playgroud)

Mat*_*tin 23

您可以将flow_from_directory中的batch_size值从默认值(即batch_size = 32)更改为batch_size = 1.然后将predict_generator的步骤设置为测试图像的总数.像这样的东西:

test_datagen = ImageDataGenerator(rescale=1./255)

test_generator = test_datagen.flow_from_directory(
        test_dir,
        target_size=(200, 200),
        color_mode="rgb",
        shuffle = False,
        class_mode='categorical',
        batch_size=1)

filenames = test_generator.filenames
nb_samples = len(filenames)

predict = model.predict_generator(test_generator,steps = nb_samples)
Run Code Online (Sandbox Code Playgroud)

  • 任何想知道模型是否对测试集进行随机预测的人:不要忘记设置“shuffle = False”。它在OP的帖子中,但有时你可能会忘记它,默认值是True。 (5认同)
  • 有人可以告诉我在使用`predict_generator`进行预测后如何计算精度吗? (2认同)
  • @MohitMotwani,为了计算准确性,您可以使用“model.evaluate(test_data, target_data)”或使用生成器“model.evaluate(test_generator, ...)”,而不是手动计算。但不要忘记在 model.fit() 中为指标添加“准确性” (2认同)

Ioa*_*ios 6

batch_size生成器中的默认值为32。如果要对总计nb_samples个样本中的每个样本进行1个预测,则应使用来指定nb_samples batch_size。因此,使用batch_size7的a ,您只需要14/7 = 2步即可获得14张图像

desired_batch_size=7

test_datagen = ImageDataGenerator(rescale=1./255)

test_generator = test_datagen.flow_from_directory(
        test_dir,
        target_size=(200, 200),
        color_mode="rgb",
        shuffle = False,
        class_mode='categorical',
        batch_size=desired_batch_size)

filenames = test_generator.filenames
nb_samples = len(filenames)

predict = model.predict_generator(test_generator,steps = 
                                   np.ceil(nb_samples/desired_batch_size))
Run Code Online (Sandbox Code Playgroud)

  • 如果我有一个大小为101的测试数据集,默认的batch_size = 32,该怎么办?如果我将steps设置为101 // 32 =3。我得到了96个预测,但最后5个样本都没有预测。如果我将步骤设置为101 = // 32 + 1 =4。将发生错误。所以我该怎么做?使用batch_size = 1,进行101个步骤?这不是一个很好的解决方案,如果我的测试数据集大小为6234547,该怎么办?使用1的批量大小将非常低效。 (3认同)

DJK*_*DJK 5

问题是nb_samples其中包含predict_generator正在创建 14 批 14 张图像的

14*14 = 196
Run Code Online (Sandbox Code Playgroud)