2017-09-16 5 views
0

J'essaye d'écrire un générateur de données, et j'aimerais hériter de l'objet ImageDataGenerator de Keras. L'intention est d'utiliser une partie des capacités de pré-traitement d'image du module Keras dans mon propre générateurPython Keras ImageDataGenerator: AttributeError: l'objet 'super' n'a pas d'attribut 'init'

from keras.preprocessing.image import ImageDataGenerator 

Malheureusement, je suis encore à essayer de comprendre comment les super cours de travail et la chose d'héritage, donc je vais avoir un disque temps de débogage mon code.

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 

Lorsque je tente de créer un objet que je reçois l'erreur suivante:

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' 

Je faisant référence à un exemple de code à partir mratsim sur GitHub:

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

où il hérite du même objet. Je devine que cela a fonctionné pour lui ..

Répondre

1

La méthode __init__ doit avoir les 4 traits de soulignement, tout comme vous l'avez fait dans la partie def.

C'est un modèle de Python, et la classe parente suit également ceci:

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

Hors sujet: souvent, les noms de classe commencent par les lettres en majuscules, pour les distinguer de la valeur ordinaire vars. Donc, DataGenerator serait un meilleur nom suite à cette recommandation.

+0

Ah je suis un idiot, je ne peux pas croire que je ne l'ai pas vu cela. Merci! Bon conseil, je vais aller avec cette nomenclature. –

-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() fonctionne 3.x python .Probably vous utilisez python 2.x

+0

super() est également utilisé dans python 2 (bien qu'une version moins verbeuse soit supportée dans python 3). https://docs.python.org/2/library/functions.html#super vs https://docs.python.org/3/library/functions.html#super –

+0

oh merci, il y a quelques jours j'ai rencontré le même problème et j'ai cherché beaucoup de super mais je ne pouvais pas le trouver. Donc je suis venu avec la version ci-dessus –

+0

devrais-je modifier ou supprimer ma réponse? –