Qu'est-ce que « from_logits=True » dans les fonctions de perte Keras/TensorFlow ? Intelligence des données PlatoBlockchain. Recherche verticale. Aï.

Qu'est-ce que 'from_logits=True' dans les fonctions de perte Keras/TensorFlow ?

Les frameworks d'apprentissage en profondeur comme Keras abaissent la barrière à l'entrée pour les masses et démocratisent le développement de modèles DL pour les personnes inexpérimentées, qui peuvent s'appuyer sur des valeurs par défaut raisonnables et des API simplifiées pour supporter le poids du travail lourd et produire des résultats décents.

Une confusion courante survient entre les nouveaux praticiens de l'apprentissage en profondeur lors de l'utilisation des fonctions de perte de Keras pour la classification, telles que CategoricalCrossentropy ainsi que SparseCategoricalCrossentropy:

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

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

Que fait le from_logits le drapeau se réfère-t-il ?

La réponse est assez simple, mais nécessite un examen de la sortie du réseau que nous essayons de classer à l'aide de la fonction de perte.

Logits et Probabilités SoftMax

Longue histoire courte:

Les probabilités sont normalisées, c'est-à-dire qu'elles sont comprises entre [0..1]. Les logits ne sont pas normalisés et peuvent être compris entre [-inf...+inf].

Selon la couche de sortie de votre réseau :

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

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

La sortie du Dense couche sera non plus revenir:

  • probabilités: La sortie passe par une fonction SoftMax qui normalise la sortie en un ensemble de probabilités sur n, tout cela équivaut à 1.
  • logis: n activations.

Cette idée fausse provient peut-être de la syntaxe abrégée qui permet d'ajouter une activation à une couche, apparemment en une seule couche, même s'il ne s'agit que d'un raccourci pour :

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

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

Votre fonction de perte doit être informée si elle doit s'attendre à une distribution normalisée (sortie transmise par une fonction SoftMax) ou logits. D'où le from_logits drapeau!

Quand devrait from_logits=Vrai?

Si votre réseau normalise les probabilités de sortie, votre fonction de perte doit définir from_logits à False, car il n'accepte pas les logits. C'est également la valeur par défaut de toutes les classes de perte qui acceptent le drapeau, car la plupart des gens ajoutent un activation='softmax' à leurs couches de sortie :

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)

Cela se traduit par:

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)

Étant donné que ce réseau aboutit à une distribution normalisée - lors de la comparaison des sorties avec les sorties cibles et de leur classement via une fonction de perte de classification (pour la tâche appropriée) - tu devrais mettre from_logits à False, ou laissez la valeur par défaut rester.

En revanche, si votre réseau n'applique pas SoftMax en sortie :

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)

Cela se traduit par:

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)

Vous auriez besoin de définir from_logits à True pour que la fonction de perte traite correctement les sorties.

Quand utiliser SoftMax sur la sortie ?

La plupart des praticiens appliquent SoftMax sur la sortie pour donner une distribution de probabilité normalisée, car c'est dans de nombreux cas pour cela que vous utiliserez un réseau - en particulier dans le matériel pédagogique simplifié. Cependant, dans certains cas, vous ne voulez pas souhaitez appliquer la fonction à la sortie, pour la traiter d'une manière différente avant d'appliquer SoftMax ou une autre fonction.

Un exemple notable vient des modèles NLP, dans lesquels une probabilité réelle sur un large vocabulaire peut être présente dans le tenseur de sortie. Appliquer SoftMax sur chacun d'entre eux et obtenir avidement le argmax ne produit généralement pas de très bons résultats.

Cependant, si vous observez les logits, extrayez le Top-K (où K peut être n'importe quel nombre mais se situe généralement entre [0...10]), et ensuite seulement en appliquant SoftMax au top-k les jetons possibles dans le vocabulaire modifient considérablement la distribution et produisent généralement des résultats plus réalistes.

Consultez notre guide pratique et pratique pour apprendre Git, avec les meilleures pratiques, les normes acceptées par l'industrie et la feuille de triche incluse. Arrêtez de googler les commandes Git et en fait apprendre il!

Ceci est connu sous le nom d'échantillonnage Top-K, et bien que ce ne soit pas la stratégie idéale, il surpasse généralement de manière significative l'échantillonnage gourmand.

Aller plus loin - Apprentissage profond pratique pour la vision par ordinateur

Votre nature curieuse vous donne envie d'aller plus loin ? Nous vous recommandons de consulter notre Cours: "Apprentissage profond pratique pour la vision par ordinateur avec Python".

Un autre cours de vision par ordinateur ?

Nous ne ferons pas de classification des chiffres MNIST ou de la mode MNIST. Ils ont fait leur part il y a longtemps. Trop de ressources d'apprentissage se concentrent sur les ensembles de données de base et les architectures de base avant de laisser les architectures de boîte noire avancées assumer le fardeau des performances.

Nous voulons nous concentrer sur démystification, pratique, compréhension, intuition ainsi que de vrais projets. Vouloir apprendre how tu peux faire la différence? Nous vous emmènerons dans un voyage de la façon dont notre cerveau traite les images à l'écriture d'un classificateur d'apprentissage en profondeur de qualité recherche pour le cancer du sein aux réseaux d'apprentissage en profondeur qui "hallucinent", vous enseignant les principes et la théorie par le biais de travaux pratiques, vous équipant du savoir-faire et outils pour devenir un expert dans l'application de l'apprentissage profond pour résoudre la vision par ordinateur.

Qu'est-ce qu'il y a à l'intérieur?

  • Les premiers principes de la vision et comment apprendre aux ordinateurs à « voir »
  • Différentes tâches et applications de la vision par ordinateur
  • Les outils du métier qui faciliteront votre travail
  • Trouver, créer et utiliser des ensembles de données pour la vision par ordinateur
  • La théorie et l'application des réseaux de neurones convolutifs
  • Gestion du changement de domaine, de la cooccurrence et d'autres biais dans les ensembles de données
  • Transférer Apprendre et utiliser le temps de formation et les ressources informatiques des autres à votre avantage
  • Construire et former un classificateur de pointe du cancer du sein
  • Comment appliquer une bonne dose de scepticisme aux idées dominantes et comprendre les implications des techniques largement adoptées
  • Visualiser « l'espace conceptuel » d'un ConvNet à l'aide de t-SNE et PCA
  • Études de cas sur la façon dont les entreprises utilisent les techniques de vision par ordinateur pour obtenir de meilleurs résultats
  • Évaluation appropriée du modèle, visualisation de l'espace latent et identification de l'attention du modèle
  • Effectuer des recherches de domaine, traiter vos propres ensembles de données et établir des tests de modèles
  • Les architectures de pointe, la progression des idées, ce qui les rend uniques et comment les mettre en œuvre
  • KerasCV - une bibliothèque WIP pour créer des pipelines et des modèles de pointe
  • Comment analyser et lire des articles et les mettre en œuvre vous-même
  • Sélection de modèles en fonction de votre application
  • Création d'un pipeline d'apprentissage automatique de bout en bout
  • Paysage et intuition sur la détection d'objets avec Faster R-CNN, RetinaNets, SSD et YOLO
  • Instance et segmentation sémantique
  • Reconnaissance d'objets en temps réel avec YOLOv5
  • Formation aux détecteurs d'objets YOLOv5
  • Travailler avec des transformateurs à l'aide de KerasNLP (bibliothèque WIP de pointe)
  • Intégration de Transformers avec ConvNets pour générer des légendes d'images
  • Rêve profond

Conclusion

Dans ce petit guide, nous avons examiné les from_logits argument pour les classes de perte de Keras, qui soulèvent souvent des questions avec les nouveaux praticiens.

La confusion provient peut-être de la syntaxe abrégée qui permet l'ajout de couches d'activation au-dessus d'autres couches, dans la définition d'une couche elle-même. Nous avons enfin examiné quand l'argument doit être défini sur True or False, et quand une sortie doit être laissée sous forme de logits ou passée par une fonction d'activation telle que SoftMax.

Horodatage:

Plus de Stackabuse