O que é 'from_logits=True' nas funções de perda Keras/TensorFlow? Inteligência de dados PlatoBlockchain. Pesquisa Vertical. Ai.

O que é 'from_logits=True' nas funções de perda Keras/TensorFlow?

Estruturas de aprendizado profundo como Keras reduzem a barreira de entrada para as massas e democratizam o desenvolvimento de modelos DL para pessoas inexperientes, que podem confiar em padrões razoáveis ​​e APIs simplificadas para suportar o peso do trabalho pesado e produzir resultados decentes.

Uma confusão comum surge entre os praticantes de deep learning mais novos ao usar funções de perda de Keras para classificação, como CategoricalCrossentropy e SparseCategoricalCrossentropy:

loss = keras.losses.SparseCategoricalCrossentropy(from_logits=True)

loss = keras.losses.SparseCategoricalCrossentropy(from_logits=False)

O que faz o from_logits bandeira se refere?

A resposta é bastante simples, mas requer uma olhada na saída da rede que estamos tentando classificar usando a função de perda.

Probabilidades de Logits e SoftMax

Longa história curta:

As probabilidades são normalizadas - ou seja, têm um intervalo entre [0..1]. Logits não são normalizados e podem ter um intervalo entre [-inf...+inf].

Dependendo da camada de saída da sua rede:

output = keras.layers.Dense(n, activation='softmax')(x)

output = keras.layers.Dense(n)(x)

A saída do Dense camada vai ou Retorna:

  • probabilidades: A saída é passada através de uma função SoftMax que normaliza a saída em um conjunto de probabilidades sobre n, que todos somam 1.
  • logs: n ativações.

Esse equívoco possivelmente surge da sintaxe abreviada que permite adicionar uma ativação a uma camada, aparentemente como uma única camada, mesmo que seja apenas uma abreviação para:

output = keras.layers.Dense(n, activation='softmax')(x)

dense = keras.layers.Dense(n)(x)
output = keras.layers.Activation('softmax')(dense)

Sua função de perda deve ser informada se deve esperar uma distribuição normalizada (saída passada por uma função SoftMax) ou logits. Daí, o from_logits bandeira!

Quando deveria from_logits=Verdadeiro?

Se sua rede normalizar as probabilidades de saída, sua função de perda deve definir from_logits para False, pois não está aceitando logits. Este também é o valor padrão de todas as classes de perda que aceitam o sinalizador, pois a maioria das pessoas adiciona um activation='softmax' para suas camadas de saída:

model = keras.Sequential([
    keras.layers.Input(shape=(10, 1)),
    
    keras.layers.Dense(10, activation='softmax') 
])

input_data = tf.random.uniform(shape=[1, 1])
output = model(input_data)
print(output)

Isto resulta em:

tf.Tensor(
[[[0.12467965 0.10423233 0.10054766 0.09162105 0.09144577 0.07093797
   0.12523937 0.11292477 0.06583504 0.11253635]]], shape=(1, 1, 10), dtype=float32)

Como essa rede resulta em uma distribuição normalizada - ao comparar as saídas com as saídas de destino e classificá-las por meio de uma função de perda de classificação (para a tarefa apropriada) - você deve definir from_logits para False, ou deixe o valor padrão permanecer.

Por outro lado, se sua rede não aplicar SoftMax na saída:

model = keras.Sequential([
    keras.layers.Input(shape=(10, 1)),
    
    keras.layers.Dense(10)
])

input_data = tf.random.uniform(shape=[1, 1])
output = model(input_data)
print(output)

Isto resulta em:

tf.Tensor(
[[[-0.06081138  0.04154852  0.00153442  0.0705068  -0.01139916
    0.08506121  0.1211026  -0.10112958 -0.03410497  0.08653068]]], shape=(1, 1, 10), dtype=float32)

Você precisaria definir from_logits para True para que a função de perda trate adequadamente as saídas.

Quando usar o SoftMax na saída?

A maioria dos profissionais aplica o SoftMax na saída para fornecer uma distribuição de probabilidade normalizada, pois em muitos casos é para isso que você usará uma rede – especialmente em material educacional simplificado. No entanto, em alguns casos, você não deseja aplicar a função à saída, processá-la de uma maneira diferente antes de aplicar o SoftMax ou outra função.

Um exemplo notável vem dos modelos de PNL, nos quais uma probabilidade real sobre um grande vocabulário pode estar presente no tensor de saída. Aplicando SoftMax sobre todos eles e avidamente obtendo o argmax normalmente não produz resultados muito bons.

No entanto, se você observar os logits, extraia o Top-K (onde K pode ser qualquer número, mas normalmente está em algum lugar entre [0...10]), e só então aplicando SoftMax no top-k possíveis tokens no vocabulário alteram significativamente a distribuição e geralmente produzem resultados mais realistas.

Confira nosso guia prático e prático para aprender Git, com práticas recomendadas, padrões aceitos pelo setor e folha de dicas incluída. Pare de pesquisar comandos Git no Google e realmente aprender -lo!

Isso é conhecido como amostragem Top-K e, embora não seja a estratégia ideal, geralmente supera significativamente a amostragem gananciosa.

Indo além - Aprendizado profundo prático para visão computacional

Sua natureza curiosa faz você querer ir mais longe? Recomendamos verificar nosso Para: “Aprendizado Profundo Prático para Visão Computacional com Python”.

Outro curso de visão computacional?

Não faremos classificação de dígitos MNIST ou moda MNIST. Eles cumpriram sua parte há muito tempo. Muitos recursos de aprendizado estão se concentrando em conjuntos de dados básicos e arquiteturas básicas antes de permitir que arquiteturas de caixa preta avançadas carreguem o fardo do desempenho.

Queremos focar em desmistificação, praticidade, compreensão, intuição e projetos reais. Quero aprender como você pode fazer a diferença? Vamos levá-lo em um passeio desde a maneira como nossos cérebros processam imagens para escrever um classificador de aprendizado profundo de nível de pesquisa para câncer de mama até redes de aprendizado profundo que “alucinam”, ensinando os princípios e a teoria por meio de trabalho prático, equipando você com o know-how e ferramentas para se tornar um especialista na aplicação de aprendizado profundo para resolver a visão computacional.

O que tem dentro?

  • Os primeiros princípios da visão e como os computadores podem ser ensinados a “ver”
  • Diferentes tarefas e aplicações de visão computacional
  • As ferramentas do comércio que facilitarão seu trabalho
  • Encontrar, criar e utilizar conjuntos de dados para visão computacional
  • A teoria e aplicação das Redes Neurais Convolucionais
  • Lidar com mudança de domínio, coocorrência e outros vieses em conjuntos de dados
  • Transferir Aprendizagem e utilizar o tempo de treinamento e recursos computacionais de outros para seu benefício
  • Construindo e treinando um classificador de câncer de mama de última geração
  • Como aplicar uma dose saudável de ceticismo às ideias dominantes e entender as implicações de técnicas amplamente adotadas
  • Visualizando o “espaço conceitual” de um ConvNet usando t-SNE e PCA
  • Estudos de caso de como as empresas usam técnicas de visão computacional para obter melhores resultados
  • Avaliação adequada do modelo, visualização do espaço latente e identificação da atenção do modelo
  • Realizando pesquisas de domínio, processando seus próprios conjuntos de dados e estabelecendo testes de modelo
  • Arquiteturas de ponta, a progressão das ideias, o que as torna únicas e como implementá-las
  • KerasCV – uma biblioteca WIP para criar pipelines e modelos de última geração
  • Como analisar e ler artigos e implementá-los você mesmo
  • Selecionando modelos dependendo da sua aplicação
  • Criando um pipeline de aprendizado de máquina de ponta a ponta
  • Paisagem e intuição na detecção de objetos com R-CNNs, RetinaNets, SSDs e YOLO mais rápidos
  • Segmentação de instância e semântica
  • Reconhecimento de objetos em tempo real com YOLOv5
  • Treinamento de detectores de objetos YOLOv5
  • Trabalhando com Transformers usando KerasNLP (biblioteca WIP de força da indústria)
  • Integrando Transformers com ConvNets para gerar legendas de imagens
  • Deepdream

Conclusão

Neste pequeno guia, demos uma olhada no from_logits argumento para as aulas de perda de Keras, que muitas vezes levantam questões com os praticantes mais novos.

A confusão possivelmente decorre da sintaxe abreviada que permite a adição de camadas de ativação em cima de outras camadas, dentro da própria definição de camada. Finalmente demos uma olhada em quando o argumento deve ser definido como True or False, e quando uma saída deve ser deixada como logits ou passada por uma função de ativação como SoftMax.

Carimbo de hora:

Mais de Abuso de pilha