Questão nº 49
Questão de Tecnologia da Informação · FGV TRF1 2024 (nº 49)
A analista Ana está implementando um script para deep learning utilizando o Python e o PyTorch. Considere o seguinte trecho do script de Ana:
import torch
import torch.nn.functional as F
input = torch.randn(3, 5, requires_grad=True)
target = torch.tensor([1, 2, 0])
loss_fn = F.nll_loss
loss = loss_fn(F.log_softmax(input, dim=1), target)
print(loss)
Ao ser executado, o trecho do script acima irá:
- Aimprimir o valor do tensor loss; (alternativa correta)
- Bfalhar, pois a função nll_loss inexiste no PyTorch;
- Cfalhar, pois a função log_softmax inexiste no PyTorch;
- Dfalhar, pois o valor atribuído à variável input não é um tensor;
- Efalhar, pois faltam informações no valor atribuído à variável target.
Resposta comentada
Gabarito Alternativa A
Em Deep Learning para classificação, a função log_softmax transforma as saídas brutas de um modelo (chamadas logits) em log-probabilidades, que são valores logarítmicos das probabilidades de cada classe. A função nll_loss (Negative Log Likelihood Loss) então usa essas log-probabilidades e os rótulos verdadeiros (índices das classes corretas) para calcular o erro do modelo, penalizando previsões incorretas.
- (A) Correta: O script executa todas as operações de forma válida. A variável
inputé um tensor de logits,targetsão os rótulos das classes (índices),F.log_softmaxconverte os logits em log-probabilidades, eF.nll_losscalcula a perda corretamente. Oprint(loss)irá, portanto, exibir o valor do tensor de perda resultante. - (B) Incorreta: A função
F.nll_lossé uma função padrão e existente no módulotorch.nn.functionaldo PyTorch, utilizada para calcular a perda de entropia cruzada negativa. - (C) Incorreta: A função
F.log_softmaxé uma função padrão e existente no módulotorch.nn.functionaldo PyTorch, utilizada para aplicar a função softmax e, em seguida, o logaritmo. - (D) Incorreta: A linha
input = torch.randn(3, 5, requires_grad=True)cria explicitamente um tensor PyTorch com valores aleatórios e a capacidade de rastrear gradientes, o que é um uso correto da API. - (E) Incorreta: A variável
target = torch.tensor([1, 2, 0])está corretamente formatada. ParaF.nll_loss(quando o input são log-probabilidades), otargetdeve ser um tensor 1D contendo os índices das classes corretas para cada amostra do batch. A armadilha aqui é que muitos iniciantes podem esperar que otargetseja um tensor one-hot encoded ou tenha a mesma dimensão do input, mas para esta função específica, os índices de classe são o formato esperado.
Fonte: FGV TRF1 2024 Analista Judiciário - Análise de Dados (Caderno Tipo 1). Reproduzida para fins de estudo.