Estou obtendo um erro ao montar ao instanciar a classe da rede neural

Home Fóruns Fórum Processamento de Linguagem Natural com Deep Learning Estou obtendo um erro ao montar ao instanciar a classe da rede neural

Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #22220
    Júnior costa
    Participante

      Olá, pessoal

      Estou fazendo uma rede neural com 3 classes e meu código travou. Tá aparecendo ‘TypeError: __init__() missing 1 required positional argument: ‘output_dim’. Não consegui achar isso na documentação. Segui o código do Jones, exceto pelas duas classes (já que uso três). Não consigo entender o que seria isso! Poderiam me ajudar? O link da célula no colab é (tb mando meu código logo abaixo). Obrigado.

      https://colab.research.google.com/drive/1HjMXbsg4-drKA_94r4_uk7TXRvZPxjvv#scrollTo=SbzJPfz-gYn5&line=27&uniqifier=1

       

      class DCNN(tf.keras.Model):
      def __init__(self,
      vocab_size,
      emb_dim= 128,
      nb_filters = 50,
      ffn_units=512,
      nb_classes = 3,
      dropout_rate = 0.1,
      training = False,
      name = ‘dcnn’):
      super(DCNN, self).__init__(name = name)

      self.embedding = layers.Embedding(vocab_size, emb_dim = 128)
      self.bigram = layers.Conv1D(filters = nb_filters, kernel_size=2,
      padding = ‘same’,
      activation = ‘relu’)
      self.trigram = layers.Conv1D(filters = nb_filters, kernel_size=3,
      padding = ‘same’,
      activation = ‘relu’)
      self.fourgram = layers.Conv1D(filters = nb_filters, kernel_size=4,
      padding = ‘same’,
      activation = ‘relu’)

      self.pool = layers.GlobalMaxPool1D()

      self.dense_1 = layers.Dense(units = ffn_units, activation= ‘relu’)

      self.dropout = layers.Dropout(rate = dropout_rate)

      if nb_classes == 2:
      self.last_dense = layers.Dense(units = 1, activation= ‘sigmoid’)
      else:
      self.last_dense = layers.Dense(units = nb_classes, activation= ‘softmax’)

      def call(self, inputs, training):
      x = self.embedding(inputs) #inicio do fluxo da rede neural, embedding
      x_1 = self.bigram(x)
      x_1 = self.pool(x_1)
      x_2 = self.trigram(x)
      x_2 = self.pool(x_2)
      x_3 = self.fourgram(x)
      x_3 = self.pool(x_3)

      merged = tf.concat([x_1, x_2, x_3], axis = -1) ##concatena o output do pooling
      merged = self.dense_1(merged) #liga os dados da concatenação à camada densa
      merged = self.dropout(merged, training) #zera porção dos neuronios
      output = self.last_dense(merged) #liga camada de drop out nessa camada

      return output

      #22221
      Júnior costa
      Participante

        Usei os mesmos valores do professor no vídeo pra instanciar o objeto.

         

        vocab_size = tokenizer.vocab_size
        emb_dim = 200
        nb_filters = 100
        ffn_units = 256
        nb_classes = len(set(train_labels))
        dropout_rate = 0.2
        nb_epochs = 10

        dcnn =DCNN(vocab_size= vocab_size,
        emb_dim = emb_dim,
        nb_filters = nb_filters,
        ffn_units = ffn_units,
        nb_classes = nb_classes, dropout_rate = dropout_rate)

        E obtenho o erro:

        TypeError: __init__() missing 1 required positional argument: ‘output_dim’

         

         

         

         

        #22223
        Jones Granatyr
        Moderador

          Olá Júnior,

          Não consigo analisar seu código, mas pela mensagem de erro parece que essa variável self.last_dense não está sendo criada. Será que ocorreu algum problema no if?

          Jones

        Visualizando 3 posts - 1 até 3 (de 3 do total)
        • Você deve fazer login para responder a este tópico.