Python Keras ImageDataGenerator: AttributeError: 'super' object has no attribute 'init'

Python Keras ImageDataGenerator: AttributeError: 'super' object has no attribute 'init'

我正在尝试编写一个数据生成器,我想从 Keras 继承 ImageDataGenerator 对象。目的是在自己的生成器中使用Keras模块的一些图像预处理能力

from keras.preprocessing.image import ImageDataGenerator

不幸的是,我仍在努力理解超级 类 的工作原理和继承的事情,所以我很难调试我的代码。

from keras.preprocessing.image import ImageDataGenerator

class dataGenerator(ImageDataGenerator):
    """
    A data generator object that flows data from selected source.
    Initializes with parameters from Keras ImageDataGenerator.
    """
    def __init__(self, *args, **kwargs):
        super(dataGenerator, self).init(*args, **kwargs)
        self.iterator=None

当我尝试创建对象时出现以下错误:

d = dataGenerator()

Traceback (most recent call last):

  File "<ipython-input-10-44bd98315a72>", line 1, in <module>
    d = dataGenerator()

  File "C:/Users/joshu/Documents/Code/Self Driving Car/data_utils.py", line 152, in __init__
    super(dataGenerator, self).init(*args, **kwargs)

AttributeError: 'super' object has no attribute 'init'

我在 GitHub 上引用了来自 mratsim 的代码示例:

[1]https://github.com/mratsim/Amazon_Forest_Computer_Vision/blob/master/src/k_dataloader.py

他继承了同一个对象。我猜这对他有用..

__init__ 方法必须有 4 个下划线,就像您在 def 部分所做的那样。

这是一个Python模式,父class也遵循这个:

super(dataGenerator,self).__init__(...)

题外话:通常,class 名称以大写字母开头,以区别于普通值变量。因此,DataGenerator 是遵循该建议的更好名称。

from keras.preprocessing.image import ImageDataGenerator

class dataGenerator(ImageDataGenerator):
    """
    A data generator object that flows data from selected source.
    Initializes with parameters from Keras ImageDataGenerator.
    """
    def __init__(self, *args, **kwargs):
        ImageDataGenerator.__init__(self,*args, **kwargs)
        self.iterator=None

super() 适用于 python 3.x 。可能你正在使用 python 2.x