Respostas no Fórum

Visualizando 15 posts - 376 até 390 (de 403 do total)
  • Autor
    Posts
  • em resposta a: CONTEUDO PARA MAIS SENTIMENTOS #34496
    Denny Ceccon
    Moderador

      Olá Kayo,

      O primeiro passo é converter os rótulos para inteiros, começando com 0 e incrementando 1 para nova cada classe. Este processo é chamado de LabelEncoder, e pode ser feito utilizando uma classe do Sklearn. No código da aula, depois de criar data_labels, você poderia fazer essa transformação assim:

      data_labels = y
      from sklearn.preprocessing import LabelEncoder
      le = LabelEncoder()
      data_labels = le.fit_transform(data_labels)
      print(data_labels)
      # array([1, 2, 2, ..., 0, 0, 1])

      Aí, depois de treinar o modelo (adaptado para seu número de classes), você continua fazendo a predição o método predict. Você veria algo assim (supondo que temos 3 classes):

      y_pred_test = Dcnn.predict(test_inputs)
      print(y_pred_test)
      # array([[0.11550928, 0.195952 , 0.6885387 ], 
      #        [0.134687  , 0.340371 , 0.52494204], 
      #        ...,
      #        [0.27549207, 0.4443647, 0.28011146],
      #        [0.10340592, 0.2649754, 0.63168657]], dtype=float32)

      Este array tem shape (n_registros, n_classes), ou seja, cada linha representa um registro e cada coluna representa uma das 3 classes. Os valores são o resultado da ativação final do modelo, que neste caso é softmax, e indicam a probabilidade de o registro daquela linha pertencer àquela classe. Ou seja, você pode recuperar a predição vendo qual a classe de maior probabilidade para cada registro, e isso pode ser feito com:

      y_pred_labels = np.argmax(y_pred_test, axis=-1)
      print(y_pred_labels)
      # array([2, 2, 0, ..., 1, 2, 2])

      Este é o resultado com os rótulos codificados, para recuperar o rótulo original você faz:

      y_pred = le.inverse_transform(y_pred_labels.reshape(-1))

      Agora, y_pred contém seus resultados finais.

      em resposta a: Série temporal com múltiplos previsores II #34375
      Denny Ceccon
      Moderador

        Olá Henrique,

        Isso ocorre na linha 39 você usa somente uma variável (índice 0) para descrever cada timestep do dataset de treinamento, mas seu X_teste (linha 93) é construído com 6 variáveis. Mudando 0:6 para 0 deve resolver o problema.

        em resposta a: Percorrer uma lista com o get_prediction #34229
        Denny Ceccon
        Moderador

          Olá Micael,

          Você pode primeiro fazer uma pequena modificação na função get_predictions, para retornar o valor ao invés de exibi-lo na tela:

          def get_prediction(sentence):
            tokens = encode_sentence(sentence)
            inputs = tf.expand_dims(tokens, 0) # (batch_size) (1,...)
            output = Dcnn(inputs, training=False)
            sentiment = math.floor(output*2)
            if sentiment == 0:
              return 'negative'
            elif sentiment == 1:
              return 'positive'

          Agora, pode organizar suas frases em um dataframe e adicionar o resultado desta forma:

          texts = ["This movie was pretty interesting", "I'd rather not do that again", "What a great time to be alive", "I wish this never happened"]
          df = pd.DataFrame({'text': texts})
          df['emotion'] = df['text'].map(get_prediction)
          print(df)
          
          <out> 
            text                              emotion
          --------------------------------------------
          0 This movie was pretty interesting positive
          1 I'd rather not do that again      negative
          2 What a great time to be alive     positive
          3 I wish this never happened        negative
          
          
          • Esta resposta foi modificada 3 anos, 1 mês atrás por Denny Ceccon.
          em resposta a: Augmentation e testes com a rede neural #34193
          Denny Ceccon
          Moderador

            Olá Henrique,

            O warning diz que seu gerador ficou sem dados. Como ele parou no batch 126, eu acho mais provável que sua pasta com os arquivos de treinamento esteja incompleta. Veja se ela contém todos os arquivos demonstrados na aula.

            em resposta a: Aula -> Validação Cruzada – Implementação #34058
            Denny Ceccon
            Moderador

              Olá Henrique,

              Esse é o número do batch. O número total de batches é definido pelo tamanho do dataset (número de instâncias), que no caso é igual a len(previsores), dividido pelo batch_size. Como o tamanho do dataset é fixo durante uma tarefa de validação cruzada, você pode alterá-lo mudando o batch_size.

              Denny Ceccon
              Moderador

                Olá Aislan,

                Basta utilizar NB_CLASSES = 5, conforme aula Treinamento do Modelo @1:22.

                em resposta a: Bert para outras linguas #33725
                Denny Ceccon
                Moderador

                  Felix, é que o BERT trabalha com uma estratégia de tokenização chamada subwords, onde as palavras são quebradas nos n-gramas de letras mais frequentes. Adicione a isso o fato de que o modelo multilíngua foi treinado com várias línguas, e o resultado é que muitos tokens não farão sentido gramatical, mas computacionalmente eles são úteis. O importante não é que a tokenização “faça sentido”, mas que sirva para a finalidade do algoritmo.

                  Existem modelos treinados em outras línguas, mas são soluções de outros grupos, não oficiais do Google. Algumas, inclusive, você consegue importar do próprio hub do Tensorflow, o que facilita a adaptação do código da aula. Não temos como oferecer suporte neste caso, mas você está livre para testá-las por conta própria.

                  em resposta a: Restore de checkpoint #33724
                  Denny Ceccon
                  Moderador

                    Olá Felix,

                    Nesse caso, você deve salvar o atributo history do objeto history com:

                    import joblib
                    joblib.dump(history.history, 'history.joblib')

                    E depois restaurar com:

                    history = joblib.load('history.joblib')

                    Observe entretanto que não é possível salvar o objeto history inteiro, apenas o atributo history dele, que contém as métricas.

                    em resposta a: Matrix de confusão para Bert #33709
                    Denny Ceccon
                    Moderador

                      Olá Felix,

                      1) Você pode recuperar y_test a partir do test_dataset. Como cada iteração do test_dataset retorna um batch de (X, y), nós podemos acumular todos os batches de y em uma lista, e depois transformá-la em um numpy array.

                      y_true = []
                      for X, y in test_dataset:
                          y_true.append(y.numpy())
                      y_true = np.concatenate(y_true)

                      Para y_pred, basta usar o modelo no modo de predição:

                      y_pred = Dcnn.predict(test_dataset)
                      y_pred = y_pred.reshape(-1)

                      Agora, se você inspecionar y_test e y_pred, vai ver que o primeiro contém 0 e 1, e o segundo contém valores reais no intervalo entre 0 e 1. Isso porque y_pred retorna a probabilidade de o tweet ser da classe 1. Para converter em 0 e 1, basta fazer y_pred = y_pred > 0.5, ou seja, se a probabilidade retornada pelo modelo for maior que 50%, a resposta final será 1, caso contrário será 0.

                      Aí você pode usar as duas variáveis com as funções que citou.

                      2) Foi sim, na aula Criação da base de dados por volta de @14:00. O professor usou o dataset de teste na parte de avaliação do modelo.

                      em resposta a: Restore de checkpoint #33707
                      Denny Ceccon
                      Moderador

                        Olá Felix,

                        Você deve usar somente ckpt.restore(ckpt_manager.latest_checkpoint), isso depois de instanciar os objetos ckpt, ckpt_manager, a classe DCNN e o objeto Dcnn instanciado dela, da mesma forma que feitos na aula, se estiver em uma nova sessão. Esta função não retorna nada, por isso seu objeto history está vazio. Depois da restauração, o objeto Dcnn, que corresponde ao modelo, terá os pesos provenientes do arquivo salvo durante o treinamento.

                        • Esta resposta foi modificada 3 anos, 2 meses atrás por Denny Ceccon.
                        em resposta a: Aplicação do np.log para distribuição normal #33677
                        Denny Ceccon
                        Moderador

                          Olá Alisson,

                          Você pode dizer a qual aula se refere?

                          em resposta a: Erro na avaliação de algoritmo #33102
                          Denny Ceccon
                          Moderador

                            Olá Vitória,

                            Pela mensagem de erro, parece que você passou o parâmetro min_sample_left na sua variável parametros, que é inválida para RandomForestClassifier. Dê uma verificada.

                            em resposta a: Versão torch 0.3.1 não está mais disponível pra Linux #33049
                            Denny Ceccon
                            Moderador

                              Olá,

                              Por enquanto, pode tentar usar a versão 1.0. As atualizações costumam ser um pouco trabalhosas, então não temos como prometer isto no curto prazo. Se tiver algum problema com a v1.0, nos avise ao longo do curso que vamos verificando pontualmente.

                              em resposta a: Transferência de Aprendizagem #33004
                              Denny Ceccon
                              Moderador

                                Olá,

                                Geralmente o processo de transferência de aprendizagem se comporta bem quando utilizamos dados da mesma natureza, como é o caso que você sugere. Entretanto, um modelo só vai conseguir prever novas classes se ele passar pelo fine tuning, ou seja, devemos treinar o topo do modelo (a parte classificatória) com novos dados rotulados. Aliás, é exatamente isso que fazemos na Parte 6 do curso. Sem o fine-tuning, o modelo sequer tem como representar uma nova classe na camada de saída, e por isso ele vai tentar encaixar novas categorias com base nas categorias já existentes, com resultados ineficientes.

                                em resposta a: Projeto #3: Breast cancer com tunning, gernado um IndexError #32915
                                Denny Ceccon
                                Moderador

                                  Olá,

                                  Este erro é relacionado à última versão do Skorch, agora o arquivo Colab já está atualizado, obrigado por nos avisar.

                                Visualizando 15 posts - 376 até 390 (de 403 do total)