Vad är 'from_logits=True' i Keras/TensorFlow Loss-funktioner? PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Vad är 'from_logits=True' i Keras/TensorFlow Loss-funktioner?

Deep Learning-ramverk som Keras sänker inträdesbarriären för massorna och demokratiserar utvecklingen av DL-modeller till oerfarna människor, som kan lita på rimliga standardinställningar och förenklade API:er för att bära bördan av tunga lyft och producera anständiga resultat.

En vanlig förvirring uppstår mellan nyare deep learning-utövare när de använder Keras förlustfunktioner för klassificering, som t.ex. CategoricalCrossentropy och SparseCategoricalCrossentropy:

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

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

Vad gör from_logits flagga hänvisa till?

Svaret är ganska enkelt, men kräver en titt på utdata från nätverket vi försöker gradera med förlustfunktionen.

Logits och SoftMax Probabilities

Lång historia kort:

Sannolikheter är normaliserade – dvs har ett intervall mellan [0..1]. Inloggningar är inte normaliserade och kan ha ett intervall mellan [-inf...+inf].

Beroende på utdataskiktet i ditt nätverk:

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

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

Resultatet av Dense lager kommer antingen lämna tillbaka:

  • sannolikheter: Utdata skickas genom en SoftMax-funktion som normaliserar utdata till en uppsättning sannolikheter över n, som alla lägger till 1.
  • logits: n aktiveringar.

Denna missuppfattning uppstår möjligen från den korta syntaxen som låter dig lägga till en aktivering till ett lager, till synes som ett enda lager, även om det bara är en förkortning för:

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

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

Din förlustfunktion måste informeras om huruvida den ska förvänta sig en normaliserad fördelning (utdata som skickas genom en SoftMax-funktion) eller logits. Därav from_logits flagga!

När ska from_logits=Sant?

Om ditt nätverk normaliserar utgångssannolikheterna bör din förlustfunktion ställas in from_logits till False, eftersom den inte accepterar logits. Detta är också standardvärdet för alla förlustklasser som accepterar flaggan, eftersom de flesta lägger till en activation='softmax' till deras utdatalager:

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)

Detta resulterar i:

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)

Eftersom detta nätverk resulterar i en normaliserad fördelning – när man jämför utdata med målutgångar och graderar dem via en klassificeringsförlustfunktion (för lämplig uppgift) – du bör ställa in from_logits till False, eller låt standardvärdet stanna.

Å andra sidan, om ditt nätverk inte tillämpar SoftMax på utgången:

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)

Detta resulterar i:

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)

Du skulle behöva ställa in from_logits till True för att förlustfunktionen ska behandla utgångarna korrekt.

När ska man använda SoftMax på utgången?

De flesta utövare tillämpar SoftMax på utdata för att ge en normaliserad sannolikhetsfördelning, eftersom det i många fall är det du kommer att använda ett nätverk till – speciellt i förenklat utbildningsmaterial. Men i vissa fall, du inte vill applicera funktionen på utgången, bearbeta den på ett annat sätt innan du applicerar antingen SoftMax eller en annan funktion.

Ett anmärkningsvärt exempel kommer från NLP-modeller, där sannolikheten över ett stort ordförråd verkligen kan finnas i utmatningstensorn. Applicera SoftMax över allihopa och girigt får argmax ger vanligtvis inte särskilt bra resultat.

Men om du observerar logits, extrahera Top-K (där K kan vara vilket nummer som helst men är vanligtvis någonstans mellan [0...10]), och först därefter tillämpar SoftMax på topp-k möjliga symboler i ordförrådet ändrar fördelningen avsevärt och ger vanligtvis mer realistiska resultat.

Kolla in vår praktiska, praktiska guide för att lära dig Git, med bästa praxis, branschaccepterade standarder och medföljande fuskblad. Sluta googla Git-kommandon och faktiskt lära Det!

Detta är känt som Top-K-sampling, och även om det inte är den idealiska strategin, överträffar det vanligtvis avsevärt giriga samplingar.

Going Further – Praktisk djupinlärning för datorseende

Din nyfikna natur gör att du vill gå längre? Vi rekommenderar att du kollar in vår Kurs: "Praktisk djupinlärning för datorseende med Python".

Ännu en kurs i datorseende?

Vi kommer inte att göra klassificering av MNIST-siffror eller MNIST-mode. De tjänade sin del för länge sedan. Alltför många inlärningsresurser fokuserar på grundläggande datamängder och grundläggande arkitekturer innan de låter avancerade blackbox-arkitekturer bära bördan av prestanda.

Vi vill fokusera på avmystifiering, praktiskhet, förståelse, intuition och riktiga projekt. Vill lära sig hur du kan göra skillnad? Vi tar dig med på en tur från hur våra hjärnor bearbetar bilder till att skriva en klassificerare för djupinlärning för bröstcancer i forskningsklass till nätverk för djupinlärning som "hallucinerar", lär dig principer och teorier genom praktiskt arbete, och utrustar dig med kunskap och verktyg för att bli expert på att tillämpa djupinlärning för att lösa datorseende.

Vad är inuti?

  • De första principerna för syn och hur datorer kan läras att "se"
  • Olika uppgifter och tillämpningar av datorseende
  • Branschens verktyg som gör ditt arbete enklare
  • Hitta, skapa och använda datauppsättningar för datorseende
  • Teorin och tillämpningen av Convolutional Neural Networks
  • Hantera domänskifte, samtidig förekomst och andra fördomar i datamängder
  • Överför Lärande och utnyttja andras träningstid och beräkningsresurser till din fördel
  • Bygga och träna en toppmodern klassificerare för bröstcancer
  • Hur man applicerar en hälsosam dos av skepsis på mainstream idéer och förstår implikationerna av allmänt använda tekniker
  • Visualisera ett ConvNets "konceptutrymme" med t-SNE och PCA
  • Fallstudier av hur företag använder datorseendetekniker för att uppnå bättre resultat
  • Korrekt modellutvärdering, latent rumsvisualisering och identifiering av modellens uppmärksamhet
  • Utföra domänforskning, bearbeta dina egna datamängder och upprätta modelltester
  • Banbrytande arkitekturer, utvecklingen av idéer, vad som gör dem unika och hur man implementerar dem
  • KerasCV – ett WIP-bibliotek för att skapa toppmoderna pipelines och modeller
  • Hur man analyserar och läser uppsatser och implementerar dem själv
  • Välja modeller beroende på din applikation
  • Skapa en komplett maskininlärningspipeline
  • Landskap och intuition på objektdetektering med snabbare R-CNN, RetinaNets, SSD och YOLO
  • Instans och semantisk segmentering
  • Objektigenkänning i realtid med YOLOv5
  • Träning av YOLOv5-objektdetektorer
  • Arbeta med transformatorer med KerasNLP (industristarkt WIP-bibliotek)
  • Integrering av Transformers med ConvNets för att generera bildtexter
  • DeepDream

Slutsats

I den här korta guiden har vi tagit en titt på from_logits argument för Keras förlustklasser, som ofta väcker frågor hos nyare utövare.

Förvirringen uppstår möjligen från den korta syntaxen som tillåter tillägg av aktiveringslager ovanpå andra lager, inom definitionen av ett lager i sig. Vi har äntligen tagit en titt på när argumentet ska ställas in True or False, och när en utgång ska lämnas som logits eller passeras genom en aktiveringsfunktion som SoftMax.

Tidsstämpel:

Mer från Stackabuse