Considere o seguinte código que tenta criar e treinar uma rede neural simples com TensorFlow e Keras. Observe o erro que pode ocorrer ao tentar executá-lo (desconsidere questões de indentação do Pythone):Com base no código, assinale a opção que indica o erro que levaria a uma falha na execução.
AO modelo não pode ser compilado porque não possui uma função de métrica definida no método compile.
BO código falhará, pois x_train e y_train não foram definidos ou carregados.
CO método Dense precisa especificar a função de ativação sigmoid na última camada.
DO código apresenta erro na função de perda, que deveria ser definida como categorical_crossentropy.
EA função Sequential deveria ter os parâmetros explicitamente definidos como layers=[].
Revelar gabarito e comentário▾
GabaritoB — O código falhará, pois x_train e y_train não foram definidos ou carregados.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Redes Neurais com TensorFlow/Keras: identificando o erro de execução
Gabarito: letra B. O código falhará porque x_train e y_train não foram definidos ou carregados antes do model.fit(). Em Python, a tentativa de usar uma variável que não recebeu valor gera NameError em tempo de execução — é exatamente o que ocorre aqui, pois o trecho apresentado não inclui a criação ou o carregamento desses dados.
O código em questão tenta construir e treinar uma rede neural simples usando a API Sequential do Keras. O fluxo típico é: definir o modelo com camadas Dense, compilar com otimizador, função de perda e métricas, e então treinar com model.fit(x_train, y_train, epochs=...). O erro apontado na alternativa B é o mais fundamental: sem os dados de treinamento, o método fit não tem o que processar e o interpretador lança uma exceção NameError ao tentar acessar x_train e y_train.
Vamos entender cada parte do código. A função Sequential cria um modelo linear, onde as camadas são adicionadas em sequência. A camada Dense é uma camada totalmente conectada, e seus principais parâmetros são o número de neurônios e a função de ativação. O método compile configura o processo de treinamento: define o otimizador (como adam), a função de perda (como sparse_categorical_crossentropy para classificação com rótulos inteiros) e as métricas de avaliação (como accuracy). O método fit executa o treinamento, recebendo os dados de entrada e os rótulos.
A alternativa B é a correta porque, no código apresentado, não há nenhuma instrução que crie ou carregue x_train e y_train. Em Python, quando uma variável não é definida, qualquer tentativa de usá-la resulta em NameError. Isso é um erro de execução, não de sintaxe — o código pode ser sintaticamente válido, mas falha ao rodar. As demais alternativas apontam problemas que não existem no código: a métrica é opcional no compile, a ativação sigmoid não é obrigatória na última camada, a função de perda sparse_categorical_crossentropy é adequada para rótulos inteiros, e a Sequential aceita as camadas como argumentos posicionais sem precisar de layers=[].
A pegadinha desta questão está em confundir erros de execução com erros de configuração do modelo. Muitos candidatos focam em detalhes de API (como a função de perda ou a ativação) e esquecem do erro mais básico: a ausência dos dados. A banca explora exatamente essa distração — o código parece completo, mas falta a definição das variáveis que alimentam o treinamento.
Alternativa A — ❌ Incorreta
A métrica não é obrigatória no método compile. O Keras permite compilar um modelo apenas com otimizador e função de perda; a métrica é um parâmetro opcional usado para monitorar o desempenho durante o treinamento. Portanto, a ausência de métrica não causa falha na execução.
Alternativa B — ✅ Correta ⟵ GABARITO
O código não define x_train e y_train antes de usá-los em model.fit(). Em Python, isso gera NameError em tempo de execução, pois a variável não existe no escopo. É o erro mais direto e evidente: sem os dados, o treinamento não pode começar.
Alternativa C — ❌ Incorreta
A função de ativação sigmoid não é obrigatória na última camada. A escolha da ativação depende do problema: para classificação binária, sigmoid é comum; para multiclasse, softmax; para regressão, nenhuma ativação (linear). O código pode usar relu ou outra ativação sem causar erro de execução.
Alternativa D — ❌ Incorreta
A função de perda sparse_categorical_crossentropy é válida quando os rótulos são inteiros (ex.: 0, 1, 2). Se os rótulos fossem one-hot encoded, usaríamos categorical_crossentropy. Mas não há erro no código por usar sparse_categorical_crossentropy — é uma escolha correta para muitos problemas de classificação.
Alternativa E — ❌ Incorreta
A Sequential aceita as camadas como argumentos posicionais, sem necessidade de nomear o parâmetro layers. O código Sequential([Dense(...), Dense(...)]) é perfeitamente válido. A alternativa sugere uma exigência que não existe na API do Keras.
NÃO CAIA NESSA!
A banca tenta desviar a atenção para detalhes de configuração do modelo (métrica, ativação, perda, parâmetros) quando o erro real é muito mais básico: a falta de definição das variáveis de dados. Em Python, usar uma variável não definida gera NameError — um erro de execução que interrompe o programa. Fique atento: antes de analisar a API, verifique se todas as variáveis usadas foram criadas.
PEGA ESSA DICA!
Ao analisar código que usa model.fit(), sempre confira se os argumentos (x_train, y_train, etc.) foram definidos anteriormente. Em questões de programação, erros de execução por variáveis não definidas são comuns e fáceis de identificar — basta procurar a atribuição da variável no código. Se não houver, é o erro.