Questão FC369936
Considere o código python a seguir. import torch from torch import nn, Tensor class CVMNet(nn.Module): def __init__(self, dim_in: int, dim_hidden: int, n_classes: int): super().__i
Inteligência Artificial (IA)
FGV · 2024
Considere o código python a seguir.
import torch
from torch import nn, Tensor
class CVMNet(nn.Module):
def __init__(self,
dim_in: int,
dim_hidden: int,
n_classes: int):
super().__init__()
self.i_layer = nn.Linear(dim_in, dim_hidden)
self.h_layer = nn.Sequential(
nn.Linear(dim_hidden, dim_hidden // 2),
nn.Tanh()
)
self.o_layer = nn.Sequential(
nn.Dropout(0.2),
nn.Linear(dim_hidden // 2, n_classes),
nn.Softmax(dim=-1)
)
def forward(self, x: Tensor):
return self.o_layer(self.h_layer(self.i_layer(x)))
model = CVMNet(400, 100, 3)
pred = model(torch.eye(20).flatten()).detach()
Sobre a variável pred, é correto afirmar que:
- seus gradientes foram preparados para a retropropagação;
- seus valores, quando somados, resultam em 1.0;
- sua dimensão é 50;
- seus valores serão os mesmos para qualquer execução do código;
- sua dimensão é 1.
Mostrar resposta e comentário
Gabarito
B
Comentário do professor
Ao passar torch.eye(20).flatten() (vetor com 400 elementos) pelo modelo, a última camada é uma sequência que termina em Softmax com dim=-1. Isso produz um vetor de saída com 3 componentes (uma pontuação por classe) transformadas em probabilidades.
A função softmax é definida por \( \text{softmax}(z)_i = \frac{e^{z_i}}{\sum_j e^{z_j}} \). Pela sua construção, os componentes são não-negativos e obedecem \( \sum_i \text{softmax}(z)_i = 1 \).
Portanto, os valores em pred correspondem a probabilidades relativas às três classes e, quando somados, resultam em 1.0 (até pequenas variações numéricas por ponto flutuante). A chamada .detach() apenas separa o tensor do grafo; não altera essa propriedade.
Conteúdo do catálogo FC Concursos · Atualizado em