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

    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

    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
    Profile photo ofjonesJones 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.