Wat is 'from_logits=True' in Keras/TensorFlow Loss Functions? PlatoBlockchain-gegevensintelligentie. Verticaal zoeken. Ai.

Wat is 'from_logits=True' in Keras/TensorFlow Loss Functions?

Deep Learning-frameworks zoals Keras verlagen de toegangsdrempel voor de massa en democratiseren de ontwikkeling van DL-modellen voor onervaren mensen, die kunnen vertrouwen op redelijke standaardinstellingen en vereenvoudigde API's om het zwaarste werk te dragen en fatsoenlijke resultaten te produceren.

Er ontstaat een veel voorkomende verwarring tussen nieuwere beoefenaars van diep leren bij het gebruik van Keras-verliesfuncties voor classificatie, zoals: CategoricalCrossentropy en SparseCategoricalCrossentropy:

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

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

Wat doet de from_logits vlag verwijzen naar?

Het antwoord is vrij eenvoudig, maar vereist een blik op de uitvoer van het netwerk dat we proberen te beoordelen met behulp van de verliesfunctie.

Logits en SoftMax-kansen

Om een โ€‹โ€‹lang verhaal kort te maken:

Waarschijnlijkheden zijn genormaliseerd - dwz hebben een bereik tussen [0..1]. Logits zijn niet genormaliseerd en kunnen een bereik hebben tussen [-inf...+inf].

Afhankelijk van de uitvoerlaag van uw netwerk:

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

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

De output van de Dense laag wil beide terugkeer:

  • waarschijnlijkheden: De uitvoer wordt door een SoftMax-functie geleid die de uitvoer normaliseert in een reeks waarschijnlijkheden over n, die allemaal optellen tot 1.
  • logboeken: n activeringen.

Deze misvatting komt mogelijk voort uit de verkorte syntaxis waarmee je een activatie aan een laag kunt toevoegen, schijnbaar als een enkele laag, ook al is het slechts een afkorting voor:

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

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

Uw verliesfunctie moet worden geรฏnformeerd over de vraag of deze een genormaliseerde verdeling (uitvoer door een SoftMax-functie) of logits moet verwachten. Vandaar dat de from_logits vlag!

Wanneer moet from_logits=Waar?

Als uw netwerk de uitvoerkansen normaliseert, moet uw verliesfunctie worden ingesteld: from_logits naar False, omdat het geen logits accepteert. Dit is ook de standaardwaarde van alle verliesklassen die de vlag accepteren, aangezien de meeste mensen een toevoegen activation='softmax' naar hun uitvoerlagen:

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)

Dit resulteert in:

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)

Aangezien dit netwerk resulteert in een genormaliseerde verdeling - bij het vergelijken van de outputs met de doeloutputs en het beoordelen ervan via een classificatieverliesfunctie (voor de juiste taak) - je zou moeten instellen from_logits naar False, of laat de standaardwaarde behouden.

Aan de andere kant, als uw netwerk SoftMax niet toepast op de uitvoer:

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)

Dit resulteert in:

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)

Je zou moeten instellen from_logits naar True voor de verliesfunctie om de uitgangen goed te behandelen.

Wanneer SoftMax gebruiken op de uitgang?

De meeste beoefenaars passen SoftMax toe op de uitvoer om een โ€‹โ€‹genormaliseerde kansverdeling te krijgen, omdat u hiervoor in veel gevallen een netwerk zult gebruiken, vooral in vereenvoudigd educatief materiaal. In sommige gevallen ben je echter niet de functie op de uitvoer wilt toepassen, deze op een andere manier wilt verwerken voordat u SoftMax of een andere functie toepast.

Een opmerkelijk voorbeeld komt uit NLP-modellen, waarin echt de waarschijnlijkheid over een grote woordenschat aanwezig kan zijn in de output tensor. SoftMax aanbrengen over allemaal en gretig de krijgen argmax levert doorgaans geen erg goede resultaten op.

Als u echter de logits observeert, extraheert u de Top-K (waar K een willekeurig getal kan zijn, maar meestal ergens tussenin ligt) [0...10]), en pas daarna SoftMax toe op de top-k mogelijke tokens in het vocabulaire verschuiven de distributie aanzienlijk en produceren meestal meer realistische resultaten.

Bekijk onze praktische, praktische gids voor het leren van Git, met best-practices, door de industrie geaccepteerde normen en bijgevoegd spiekbriefje. Stop met Googlen op Git-commando's en eigenlijk leren het!

Dit staat bekend als Top-K-sampling, en hoewel het niet de ideale strategie is, presteert het meestal aanzienlijk beter dan hebzuchtige sampling.

Verder gaan - Praktisch diep leren voor computervisie

Je leergierige karakter maakt dat je verder wilt gaan? We raden aan om onze Type cursus: "Praktisch diep leren voor computervisie met Python".

Nog een cursus computervisie?

We zullen geen classificatie van MNIST-cijfers of MNIST-mode doen. Ze hebben lang geleden hun deel gediend. Te veel leermiddelen zijn gericht op basisgegevenssets en basisarchitecturen voordat geavanceerde black-box-architecturen de last van de prestaties op zich nemen.

We willen ons concentreren op demystificatie, uitvoerbaarheid, begrip, intuรฏtie en echte projecten. Willen leren hoe je kan een verschil maken? We nemen je mee op een reis van de manier waarop onze hersenen afbeeldingen verwerken tot het schrijven van een onderzoeksclassificatie voor diep leren voor borstkanker tot diepgaande leernetwerken die 'hallucineren', je de principes en theorie leren door middel van praktisch werk, en je uitrusten met de knowhow en tools om een โ€‹โ€‹expert te worden in het toepassen van deep learning om computervisie op te lossen.

Wat zit erin?

  • De eerste principes van visie en hoe computers kunnen worden geleerd om te "zien"
  • Verschillende taken en toepassingen van computervisie
  • De tools van het vak die uw werk gemakkelijker maken
  • Datasets zoeken, maken en gebruiken voor computervisie
  • De theorie en toepassing van convolutionele neurale netwerken
  • Omgaan met domeinverschuiving, gelijktijdig voorkomen en andere vooroordelen in datasets
  • Overdragen Leren en de trainingstijd en computerbronnen van anderen gebruiken in uw voordeel
  • Het bouwen en trainen van een state-of-the-art classifier voor borstkanker
  • Hoe je een gezonde dosis scepsis toepast op mainstream ideeรซn en de implicaties begrijpt van algemeen aanvaarde technieken?
  • De "conceptruimte" van een ConvNet visualiseren met t-SNE en PCA
  • Casestudy's van hoe bedrijven computervisietechnieken gebruiken om betere resultaten te behalen
  • Correcte modelevaluatie, visualisatie van de latente ruimte en het identificeren van de aandacht van het model
  • Domeinonderzoek doen, eigen datasets verwerken en modeltesten opzetten
  • Geavanceerde architecturen, de voortgang van ideeรซn, wat ze uniek maakt en hoe ze te implementeren
  • KerasCV โ€“ een WIP-bibliotheek voor het maken van ultramoderne pijplijnen en modellen
  • Hoe papers te ontleden en te lezen en ze zelf te implementeren?
  • Modellen selecteren afhankelijk van uw toepassing
  • Een end-to-end machine learning-pijplijn maken
  • Landschap en intuรฏtie bij objectdetectie met snellere R-CNN's, RetinaNets, SSD's en YOLO
  • Instantie en semantische segmentatie
  • Realtime objectherkenning met YOLOv5
  • YOLOv5-objectdetectoren trainen
  • Werken met Transformers met KerasNLP (industriรซle WIP-bibliotheek)
  • Transformers integreren met ConvNets om bijschriften van afbeeldingen te genereren
  • DeepDream

Conclusie

In deze korte handleiding hebben we gekeken naar de from_logits argument voor Keras-verliesklassen, die vaak vragen oproepen bij nieuwere beoefenaars.

De verwarring komt mogelijk voort uit de verkorte syntaxis die het mogelijk maakt om activeringslagen toe te voegen bovenop andere lagen, binnen de definitie van een laag zelf. We hebben eindelijk gekeken wanneer het argument moet worden ingesteld op: True or False, en wanneer een uitgang als logits moet worden achtergelaten of door een activeringsfunctie zoals SoftMax moet worden geleid.

Tijdstempel:

Meer van Stapelmisbruik