我正在尝试编写数据生成器,我想从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
他继承了同一个对象。我猜它对他有用..
答案 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