首页 > 解决方案 > Keras:DataFrameIterator - 如何获取下一批(TypeError:'float' object is not callable)

问题描述

我正在使用flow_from_dataframe构建一个 DataFrameIterator:

datagen=ImageDataGenerator()
train_generator=datagen.flow_from_dataframe(...)

print(train_generator)
>> <keras_preprocessing.image.DataFrameIterator object at 0x00000262F5D93F60>

现在我正试图从这个生成器中获取一个批次。通常next(train_generator)flow_from_directory生成器上使用,但是这种方法

x,y = next(train_generator)

x,y = train_generator.next

结果是:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-48-6be8f38d3987> in <module>
----> 1 next(train_generator)

~\AppData\Local\Continuum\anaconda3\envs\tensorflow-gpu\lib\site-packages\keras_preprocessing\image.py in __next__(self, *args, **kwargs)
   1524 
   1525     def __next__(self, *args, **kwargs):
-> 1526         return self.next(*args, **kwargs)
   1527 
   1528     def _get_batches_of_transformed_samples(self, index_array):

~\AppData\Local\Continuum\anaconda3\envs\tensorflow-gpu\lib\site-packages\keras_preprocessing\image.py in next(self)
   2201         # The transformation of images is not under thread lock
   2202         # so it can be done in parallel
-> 2203         return self._get_batches_of_transformed_samples(index_array)

~\AppData\Local\Continuum\anaconda3\envs\tensorflow-gpu\lib\site-packages\keras_preprocessing\image.py in _get_batches_of_transformed_samples(self, index_array)
   2160             params = self.image_data_generator.get_random_transform(x.shape)
   2161             x = self.image_data_generator.apply_transform(x, params)
-> 2162             x = self.image_data_generator.standardize(x)
   2163             batch_x[i] = x
   2164         # optionally save augmented images to disk for debugging purposes

~\AppData\Local\Continuum\anaconda3\envs\tensorflow-gpu\lib\site-packages\keras_preprocessing\image.py in standardize(self, x)
   1117         """
   1118         if self.preprocessing_function:
-> 1119             x = self.preprocessing_function(x)
   1120         if self.rescale:
   1121             x *= self.rescale

TypeError: 'float' object is not callable

如何访问单个批次(即下一批)?

编辑:正如@today在评论中指出的那样,使用 next(train_generator) 应该可以正常工作。在我的情况下,我使用的是preprocess_input参数,ImageDataGenerator而我应该使用rescale参数。现在问题解决了!

标签: pythonkeras

解决方案


尝试

x,y = next(iter(train_generator))

推荐阅读