Python Keras ImageDataGenerator:AttributeError:'super'对象没有属性'init'

时间:2017-09-16 22:06:37

标签: python inheritance keras super

我正在尝试编写数据生成器,我想从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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

偏离主题:通常,类名以大写字母开头,以区别于普通值变量。因此,根据该建议,DataGenerator将是一个更好的名称。

答案 1 :(得分:-1)

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