Hva er 'from_logits=True' i Keras/TensorFlow-tapfunksjoner? PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Hva er 'from_logits=True' i Keras/TensorFlow-tapfunksjoner?

Deep Learning-rammeverk som Keras senker inngangsbarrieren for massene og demokratiserer utviklingen av DL-modeller til uerfarne folk, som kan stole på rimelige standardinnstillinger og forenklede API-er for å bære byrden av tunge løft, og produsere anstendige resultater.

En vanlig forvirring oppstår mellom nyere dyplæringsutøvere når de bruker Keras tapsfunksjoner for klassifisering, som f.eks. CategoricalCrossentropy og SparseCategoricalCrossentropy:

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

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

Hva betyr from_logits flagg refererer til?

Svaret er ganske enkelt, men krever en titt på utdataene til nettverket vi prøver å gradere ved hjelp av tapsfunksjonen.

Logitter og SoftMax Probabilities

Lang historie kort:

Sannsynlighetene er normaliserte – dvs. har et område mellom [0..1]. Logitter er ikke normalisert, og kan ha et område mellom [-inf...+inf].

Avhengig av utdatalaget til nettverket ditt:

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

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

Resultatet av Dense laget vil enten komme tilbake:

  • sannsynligheter: Utgangen sendes gjennom en SoftMax-funksjon som normaliserer utgangen til et sett med sannsynligheter over n, som alle legger opp til 1.
  • logits: n aktiveringer.

Denne misforståelsen oppstår muligens fra den korte syntaksen som lar deg legge til en aktivering til et lag, tilsynelatende som et enkelt lag, selv om det bare er en forkortelse for:

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

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

Tapsfunksjonen din må informeres om hvorvidt den skal forvente en normalisert distribusjon (utgang sendt gjennom en SoftMax-funksjon) eller logits. Derav from_logits flagg!

Når skal from_logits=Sant?

Hvis nettverket ditt normaliserer utgangssannsynlighetene, bør tapsfunksjonen stilles inn from_logits til False, siden den ikke godtar logits. Dette er også standardverdien for alle tapsklasser som godtar flagget, ettersom de fleste legger til en activation='softmax' til utdatalagene deres:

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)

Dette resulterer 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)

Siden dette nettverket resulterer i en normalisert fordeling – når man sammenligner utgangene med målutgangene og graderer dem via en klassifiseringstapsfunksjon (for den aktuelle oppgaven) – du bør sette from_logits til False, eller la standardverdien forbli.

På den annen side, hvis nettverket ditt ikke bruker SoftMax på utgangen:

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)

Dette resulterer 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 må stille inn from_logits til True for at tapsfunksjonen skal behandle utgangene riktig.

Når skal man bruke SoftMax på utgangen?

De fleste utøvere bruker SoftMax på output for å gi en normalisert sannsynlighetsfordeling, da dette i mange tilfeller er det du vil bruke et nettverk til – spesielt i forenklet undervisningsmateriell. Men i noen tilfeller kan du ikke ønsker å bruke funksjonen på utgangen, å behandle den på en annen måte før du bruker enten SoftMax eller en annen funksjon.

Et bemerkelsesverdig eksempel kommer fra NLP-modeller, der en virkelig sannsynlighet for et stort ordforråd kan være tilstede i utgangstensoren. Bruker SoftMax over alle sammen og grådig får argmax gir vanligvis ikke gode resultater.

Men hvis du observerer logits, trekk ut Top-K (hvor K kan være et hvilket som helst tall, men er vanligvis et sted mellom [0...10]), og først deretter bruke SoftMax på topp-k mulige tokens i vokabularet forskyver distribusjonen betydelig, og gir vanligvis mer realistiske resultater.

Sjekk ut vår praktiske, praktiske guide for å lære Git, med beste praksis, bransjeaksepterte standarder og inkludert jukseark. Slutt å google Git-kommandoer og faktisk lære den!

Dette er kjent som Top-K-sampling, og selv om det ikke er den ideelle strategien, overgår det vanligvis den grådige samplingen betydelig.

Gå videre – praktisk dyp læring for datasyn

Din nysgjerrige natur gjør at du ønsker å gå lenger? Vi anbefaler å sjekke ut vår Kurs: "Praktisk dyplæring for datasyn med Python".

Et annet datasynskurs?

Vi kommer ikke til å klassifisere MNIST-sifre eller MNIST-mote. De tjente sin del for lenge siden. For mange læringsressurser fokuserer på grunnleggende datasett og grunnleggende arkitekturer før de lar avanserte svartboksarkitekturer bære byrden av ytelse.

Vi ønsker å fokusere på avmystifisering, praktisk, forståelse, intuisjon og ekte prosjekter. Vil lære hvordan du kan gjøre en forskjell? Vi tar deg med på en tur fra måten hjernen vår behandler bilder på til å skrive en dyplæringsklassifiser for brystkreft til dyplæringsnettverk som "hallusinerer", lærer deg prinsippene og teorien gjennom praktisk arbeid, og utstyrer deg med kunnskap og verktøy for å bli en ekspert på å bruke dyp læring for å løse datasyn.

Hva er inni?

  • De første prinsippene for visjon og hvordan datamaskiner kan læres å "se"
  • Ulike oppgaver og anvendelser av datasyn
  • Verktøyene i bransjen som vil gjøre arbeidet ditt enklere
  • Finne, lage og bruke datasett for datasyn
  • Teorien og anvendelsen av konvolusjonelle nevrale nettverk
  • Håndtering av domeneskift, samtidig forekomst og andre skjevheter i datasett
  • Overfør Læring og bruk av andres treningstid og beregningsressurser til din fordel
  • Bygge og trene en toppmoderne brystkreftklassifiser
  • Hvordan bruke en sunn dose skepsis til mainstream ideer og forstå implikasjonene av vidt vedtatte teknikker
  • Visualisere et ConvNets "konseptrom" ved hjelp av t-SNE og PCA
  • Kasusstudier av hvordan bedrifter bruker datasynsteknikker for å oppnå bedre resultater
  • Riktig modellevaluering, latent romvisualisering og identifisering av modellens oppmerksomhet
  • Utføre domeneforskning, behandle egne datasett og etablere modelltester
  • Nyskapende arkitekturer, utviklingen av ideer, hva som gjør dem unike og hvordan de implementeres
  • KerasCV – et WIP-bibliotek for å lage toppmoderne rørledninger og modeller
  • Hvordan analysere og lese artikler og implementere dem selv
  • Velge modeller avhengig av din applikasjon
  • Opprette en ende-til-ende maskinlæringspipeline
  • Landskap og intuisjon på objektdeteksjon med raskere R-CNN, RetinaNets, SSD og YOLO
  • Forekomst og semantisk segmentering
  • Objektgjenkjenning i sanntid med YOLOv5
  • Trening av YOLOv5-objektdetektorer
  • Arbeide med transformatorer ved å bruke KerasNLP (bransjesterkt WIP-bibliotek)
  • Integrering av transformatorer med ConvNets for å generere bildetekster
  • Deepdream

konklusjonen

I denne korte guiden har vi tatt en titt på from_logits argument for Keras tapsklasser, som ofte reiser spørsmål hos nyere utøvere.

Forvirringen oppstår muligens fra den korte syntaksen som tillater å legge til aktiveringslag på toppen av andre lag, innenfor definisjonen av et lag i seg selv. Vi har endelig tatt en titt på når argumentet skal settes til True or False, og når en utgang skal stå som logits eller sendes gjennom en aktiveringsfunksjon som SoftMax.

Tidstempel:

Mer fra Stackabuse