【问题标题】:Evaluate keras model with image data generator使用图像数据生成器评估 keras 模型
【发布时间】:2021-12-12 07:59:01
【问题描述】:

所以我通过调用fit_generator 方法并将ImageDataGenerator 对象传递给它,使用ImageDataGenerator 训练了一个Keras 模型。

现在我想用相同的ImageDataGenerator 对象评估模型。但我觉得我错过了一些东西。

我的数据包含在 2 个变量中,

ck_train = ImageDataGenerator().flow_from_directory(train_path, target_size=(
    224, 224), classes=['happy', 'neutral', 'surprise'], batch_size=32)
ck_test = ImageDataGenerator().flow_from_directory(test_path, target_size=(
    224, 224), classes=['happy', 'neutral', 'surprise'], batch_size=16)

我尝试通过

评估模型
deXpression.evaluate_generator(ck_test)

但我收到此错误

-----------------------------------------------------------------------
ValueError                            Traceback (most recent call last)
<ipython-input-6-0d318201cacd> in <module>
----> 1 deXpression.evaluate_generator(ck_test)

~/anaconda3/envs/gandola/lib/python3.7/site-packages/keras/legacy/interfaces.py in wrapper(*args, **kwargs)
     89                 warnings.warn('Update your `' + object_name + '` call to the ' +
     90                               'Keras 2 API: ' + signature, stacklevel=2)
---> 91             return func(*args, **kwargs)
     92         wrapper._original_function = func
     93         return wrapper

~/anaconda3/envs/gandola/lib/python3.7/site-packages/keras/engine/training.py in evaluate_generator(self, generator, steps, max_queue_size, workers, use_multiprocessing, verbose)
   1470             workers=workers,
   1471             use_multiprocessing=use_multiprocessing,
-> 1472             verbose=verbose)
   1473 
   1474     @interfaces.legacy_generator_methods_support

~/anaconda3/envs/gandola/lib/python3.7/site-packages/keras/engine/training_generator.py in evaluate_generator(model, generator, steps, max_queue_size, workers, use_multiprocessing, verbose)
    299             steps = len(generator)
    300         else:
--> 301             raise ValueError('`steps=None` is only valid for a generator'
    302                              ' based on the `keras.utils.Sequence` class.'
    303                              ' Please specify `steps` or use the'

ValueError: `steps=None` is only valid for a generator based on the `keras.utils.Sequence` class. Please specify `steps` or use the `keras.utils.Sequence` class.

请告诉我:

1) 如果我朝着正确的方向前进?
2)如果我是,我错过了什么?
3)如何使用 ImageDataGenerator 对象来做到这一点?
4) 什么是完成我想要完成的任务的正确方法?

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    我解决了这个问题。问题在于model.evaluate_generatorsteps 参数。

    STEP_SIZE_TEST = ck_test.n // ck_test.batch_size
    deXpression.evaluate_generator(generator=ck_test, steps=STEP_SIZE_TEST)
    

    【讨论】:

      【解决方案2】:

      或许这种方式能给你一个思路:

      train_datagen = ImageDataGenerator(
          rescale=1./255,)
      
      test_datagen = ImageDataGenerator(rescale=1./255)
      
      train_generator = train_datagen.flow_from_directory(
          train_data_dir,
          color_mode= "grayscale",
          target_size=(img_width, img_height),
          batch_size=128,
          class_mode='categorical',)    
      
      validation_generator = test_datagen.flow_from_directory(
          validation_data_dir,
          color_mode= "grayscale",
          target_size=(img_width, img_height),
          batch_size=128,
          class_mode='categorical')
      
       #%%
      hist = model.fit_generator(
          train_generator,
          samples_per_epoch=nb_train_samples,
          nb_epoch=nb_epoch,
          validation_data=validation_generator,
          nb_val_samples=nb_validation_samples)
      
      scoreSeg = model.evaluate_generator(validation_generator, 400)
      

      【讨论】:

        【解决方案3】:

        'evaluate' 方法似乎还直接支持生成器,所以原来的方法现在可以工作了。

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-11
        • 1970-01-01
        • 1970-01-01
        • 2017-02-22
        • 1970-01-01
        相关资源
        最近更新 更多