Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

622
Views
AttributeError: no se puede asignar el módulo antes de la llamada Module.__init__()

Estoy teniendo el siguiente error.

 Traceback (most recent call last): File "main.py", line 63, in <module> question_classifier = QuestionClassifier(corpus.dictionary, embeddings_index, corpus.max_sent_length, args) File "/net/if5/wua4nw/wasi/academic/research_with_prof_chang/projects/question_answering/duplicate_question_detection/source/question_classifier.py", line 26, in __init__ self.embedding = EmbeddingLayer(len(dictionary), args.emsize, args.dropout) File "/if5/wua4nw/anaconda3/lib/python3.5/site-packages/torch/nn/modules/module.py", line 255, in __setattr__ "cannot assign module before Module.__init__() call") AttributeError: cannot assign module before Module.__init__() call

Tengo una clase de la siguiente manera.

 class QuestionClassifier(nn.Module): def __init__(self, dictionary, embeddings_index, max_seq_length, args): self.embedding = EmbeddingLayer(len(dictionary), args.emsize, args.dropout) self.encoder = EncoderRNN(args.emsize, args.nhid, args.model, args.bidirection, args.nlayers, args.dropout) self.drop = nn.Dropout(args.dropout)

Entonces, cuando ejecuto la siguiente línea:

 question_classifier = QuestionClassifier(corpus.dictionary, embeddings_index, corpus.max_sent_length, args)

Me sale el error mencionado anteriormente. Aquí, EmbeddingLayer y EncoderRNN son una clase escrita por mí que hereda nn.module como la clase QuestionClassifier .

¿Qué estoy haciendo mal aquí?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Mirando el código fuente de pytorch para Module , vemos en la cadena de documentación un ejemplo de derivación de Module incluye:

 class Model(nn.Module): def __init__(self): super(Model, self).__init__() self.conv1 = nn.Conv2d(1, 20, 5) self.conv2 = nn.Conv2d(20, 20, 5)

Así que probablemente quieras llamar al init de Module de la misma manera en tu clase derivada:

 super(QuestionClassifier, self).__init__()
over 4 years ago · Santiago Trujillo Report

0

Pytorch realiza un seguimiento de los submódulos ( conv1 , conv2 ) que escribirá en su módulo personalizado. Debajo del capó, el gráfico correspondiente a su modelo se construye automáticamente.

Los Módulos anidados se agregarán a un OrderedDict _modules (inicializado en nn.Module.__init__ ) Ver fuente (L69)

Si no se llama a nn.Module.__init__ ( self._modules sería igual a None ), al intentar agregar un módulo, generará un error (no se puede agregar ninguna clave a None ). Ver fuente (L540-544)

Inspirado en el documento :

 class CustomModule(nn.Module): def __init__(self): super(CustomModule, self).__init__() # Initialize self._modules as OrderedDict self.conv1 = nn.Conv2d(1, 20, 5) # Add key conv1 to self._modules self.conv2 = nn.Conv2d(20, 20, 5) # Add key conv2 to self._modules
over 4 years ago · Santiago Trujillo Report

0

Esto suele ocurrir cuando no se ha llamado al init de la superclase. En este caso, uno debe comenzar su clase de red neuronal con la llamada super.__init__() . El código se vería así:

 class QuestionClassifier(nn.Module): def __init__(self, dictionary, embeddings_index, max_seq_length, args): super().__init__()

La llamada de inicio de este super debe estar dentro del código de inicio de esta clase.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!