1
resposta

[Dúvida] Erro 'float' object has no attribute 'size'

Olá, Bom dia.

Estou tendo o seguinte erro ao rodar o comando:

from accelerate import notebook_launcher

notebook_launcher(funcao_treinamento)

assim que termina a primeira sessão de treinamento (50%) ele me retorna esse erro:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-45-72dda5bcf0c7> in <cell line: 3>()
      1 from accelerate import notebook_launcher
      2 
----> 3 notebook_launcher(funcao_treinamento)

4 frames
~/.cache/huggingface/modules/evaluate_modules/metrics/evaluate-metric--f1/0ca73f6cf92ef5a268320c697f7b940d1030f8471714bffdb6856c641b818974/f1.py in _compute(self, predictions, references, labels, pos_label, average, sample_weight)
    128             references, predictions, labels=labels, pos_label=pos_label, average=average, sample_weight=sample_weight
    129         )
--> 130         return {"f1": float(score) if score.size == 1 else score}

AttributeError: 'float' object has no attribute 'size'

tentei pelo notebook do professor e também acontece o mesmo erro, estou deixando passar algo?

1 resposta

Olá Inectar! Como vai?

Esse erro, AttributeError: 'float' object has no attribute 'size', indica que a variável score dentro da função_compute da métrica F1 está retornando um valor do tipo float, e não um array ou tensor como esperado. Isso significa que algo no seu processo de cálculo da métrica F1 está errado, provavelmente na forma como as previsões (predictions) e referências (references) estão sendo passadas para a função compute.

O erro ocorre na etapa de avaliação, após o treinamento. A função funcao_treinamento contém a lógica de avaliação, e é aqui que precisamos focar. Observe a parte do código que calcula as métricas:

metrica_avaliacao_acuracia = acuracia.compute(predictions=lista_previsoes, references=lista_labels)
metricas_avaliacao_agregadas = metricas_agregadas.compute(predictions=lista_previsoes, references=lista_labels, average = 'macro')

Aqui, lista_previsoes e lista_labels são as listas que contêm as previsões do modelo e os rótulos reais, respectivamente. O problema está provavelmente em como essas listas são construídas ou no formato dos dados dentro delas.

Recomendo que siga os passos abaixo para encontrar o problema:

  1. Verifique os tipos de dados: Antes de chamar acuracia.compute e metricas_agregadas.compute, imprima os tipos de lista_previsoes e lista_labels usando print(type(lista_previsoes)) e print(type(lista_labels)). Eles devem ser tensores do PyTorch ( torch.Tensor). Se não forem, investigue como lista_previsoes e lista_labels estão sendo construídos no loop de avaliação. Garanta que accelerator.gather está retornando o tipo de dado esperado.

  2. Inspecione os dados: Imprima alguns elementos de lista_previsoes e lista_labels para verificar se eles estão no formato correto. Por exemplo: print(lista_previsoes[:5]) e print(lista_labels[:5]). Procure por valores inesperados ou formatos inconsistentes.

  3. Simplifique a avaliação: Para isolar o problema, tente avaliar apenas uma pequena parte dos dados. Modifique o loop de avaliação para processar apenas os primeiros 10 ou 100 exemplos. Isso pode ajudar a identificar o ponto exato onde o erro ocorre.

  4. Revise a definição das métricas: Certifique-se de que as métricas acuracia e metricas_agregadas estão corretamente definidas e configuradas. Verifique se você está importando-as corretamente e se elas são compatíveis com o formato dos seus dados.

  5. Verifique a versão do evaluate: Certifique-se de que você está usando uma versão compatível do evaluate. Conflitos de versão podem causar problemas inesperados.

O erro está acontecendo após o treinamento ter progredido até 50%, indicando que o problema está na fase de avaliação, não no treinamento. Imprima informações em cada etapa para identificar a causa raíz e se precisar de mais ajuda, compartilhe o trecho da função funcao_treinamento, especialmente a avaliação, para analisarmos com mais assertividade.

Espero ter ajudado. Conte com o apoio do fórum em sua jornada :)

Um abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!