Che cosa è "from_logits=True" nelle funzioni di perdita Keras/TensorFlow? Intelligenza dei dati PlatoBlockchain. Ricerca verticale. Ai.

Che cos'è 'from_logits=True' in Keras/TensorFlow Loss Functions?

I framework di deep learning come Keras abbassano la barriera all'ingresso delle masse e democratizzano lo sviluppo di modelli DL a persone inesperte, che possono fare affidamento su impostazioni predefinite ragionevoli e API semplificate per sopportare il peso del lavoro pesante e produrre risultati decenti.

Sorge una confusione comune tra i nuovi professionisti del deep learning quando si utilizzano le funzioni di perdita di Keras per la classificazione, ad esempio CategoricalCrossentropy ed SparseCategoricalCrossentropy:

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

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

Cosa fa il from_logits bandiera si riferisce?

La risposta è abbastanza semplice, ma richiede uno sguardo all'output della rete che stiamo cercando di classificare utilizzando la funzione di perdita.

Logit e probabilità di SoftMax

Per farla breve:

Le probabilità sono normalizzate, cioè hanno un intervallo tra [0..1]. I logit non sono normalizzati e possono avere un intervallo tra [-inf...+inf].

A seconda del livello di output della tua rete:

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

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

L'output di Dense lo strato sarà o ritorno:

  • probabilità: L'output viene passato attraverso una funzione SoftMax che normalizza l'output in un insieme di probabilità n, tutto sommato 1.
  • log: n attivazioni.

Questo malinteso probabilmente deriva dalla sintassi abbreviata che consente di aggiungere un'attivazione a un livello, apparentemente come un unico livello, anche se è solo un'abbreviazione per:

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

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

La tua funzione di perdita deve essere informata se dovrebbe aspettarsi una distribuzione normalizzata (output passato attraverso una funzione SoftMax) o logit. Quindi il from_logits bandiera!

Quando dovrebbe? from_logits=Vero?

Se la tua rete normalizza le probabilità di output, la tua funzione di perdita dovrebbe essere impostata from_logits a False, poiché non accetta logit. Questo è anche il valore predefinito di tutte le classi di perdita che accettano il flag, poiché la maggior parte delle persone aggiunge un activation='softmax' ai loro livelli di output:

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)

Questo risulta 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)

Poiché questa rete si traduce in una distribuzione normalizzata – quando si confrontano gli output con gli output target e li classificano tramite una funzione di perdita di classificazione (per l'attività appropriata) – dovresti impostare from_logits a Falseo lasciare che il valore predefinito rimanga.

D'altra parte, se la tua rete non applica SoftMax sull'output:

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)

Questo risulta 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)

Dovresti impostare from_logits a True affinché la funzione di perdita tratti correttamente le uscite.

Quando utilizzare SoftMax sull'uscita?

La maggior parte dei professionisti applica SoftMax sull'output per fornire una distribuzione di probabilità normalizzata, poiché questo è in molti casi ciò per cui utilizzerai una rete, specialmente nel materiale didattico semplificato. Tuttavia, in alcuni casi, tu non desidera applicare la funzione all'output, per elaborarla in un modo diverso prima di applicare SoftMax o un'altra funzione.

Un esempio notevole viene dai modelli NLP, in cui una probabilità su un ampio vocabolario può essere presente nel tensore di output. Applicazione di SoftMax sopra tutti loro e ottenendo avidamente il argmax in genere non produce risultati molto buoni.

Tuttavia, se osservi i logit, estrai Top-K (dove K può essere qualsiasi numero ma in genere è una via di mezzo [0...10]), e solo successivamente applicando SoftMax a top-k possibili token nel vocabolario spostano significativamente la distribuzione e di solito producono risultati più realistici.

Dai un'occhiata alla nostra guida pratica e pratica per l'apprendimento di Git, con le migliori pratiche, gli standard accettati dal settore e il cheat sheet incluso. Smetti di cercare su Google i comandi Git e in realtà imparare esso!

Questo è noto come campionamento Top-K e, sebbene non sia la strategia ideale, di solito supera in modo significativo il campionamento avido.

Andare oltre - Apprendimento profondo pratico per la visione artificiale

La tua natura curiosa ti fa venire voglia di andare oltre? Ti consigliamo di dare un'occhiata al nostro Portata: "Apprendimento profondo pratico per la visione artificiale con Python".

Un altro corso di visione artificiale?

Non faremo la classificazione delle cifre MNIST o della moda MNIST. Hanno servito la loro parte molto tempo fa. Troppe risorse di apprendimento si stanno concentrando su set di dati di base e architetture di base prima di lasciare che le architetture black-box avanzate si assumano il peso delle prestazioni.

Vogliamo concentrarci demistificazione, praticità, e una comprensione reciproca, intuizione ed progetti reali. Vuoi imparare come Puoi fare la differenza? Ti porteremo in un viaggio dal modo in cui il nostro cervello elabora le immagini alla scrittura di un classificatore di apprendimento profondo per la ricerca per il cancro al seno alle reti di apprendimento profondo che "allucinano", insegnandoti i principi e la teoria attraverso il lavoro pratico, fornendoti il know-how e strumenti per diventare un esperto nell'applicazione del deep learning per risolvere la visione artificiale.

Cosa c'è dentro?

  • I primi principi della visione e come si può insegnare ai computer a "vedere"
  • Diversi compiti e applicazioni della visione artificiale
  • Gli strumenti del mestiere che ti semplificheranno il lavoro
  • Trovare, creare e utilizzare set di dati per la visione artificiale
  • La teoria e l'applicazione delle reti neurali convoluzionali
  • Gestione del cambio di dominio, della co-occorrenza e di altri pregiudizi nei set di dati
  • Trasferisci l'apprendimento e utilizza il tempo di formazione e le risorse di calcolo degli altri a tuo vantaggio
  • Costruire e formare un classificatore di cancro al seno all'avanguardia
  • Come applicare una sana dose di scetticismo alle idee tradizionali e comprendere le implicazioni delle tecniche ampiamente adottate
  • Visualizzazione dello "spazio concettuale" di una ConvNet utilizzando t-SNE e PCA
  • Casi di studio su come le aziende utilizzano le tecniche di visione artificiale per ottenere risultati migliori
  • Valutazione corretta del modello, visualizzazione dello spazio latente e identificazione dell'attenzione del modello
  • Esecuzione di ricerche di dominio, elaborazione dei propri set di dati e creazione di test di modello
  • Architetture all'avanguardia, la progressione delle idee, cosa le rende uniche e come realizzarle
  • KerasCV – una libreria WIP per la creazione di pipeline e modelli all'avanguardia
  • Come analizzare e leggere documenti e implementarli da soli
  • Selezione dei modelli in base all'applicazione
  • Creazione di una pipeline di machine learning end-to-end
  • Paesaggio e intuizione sul rilevamento di oggetti con R-CNN, RetinaNet, SSD e YOLO più veloci
  • Istanza e segmentazione semantica
  • Riconoscimento di oggetti in tempo reale con YOLOv5
  • Formazione dei rilevatori di oggetti YOLOv5
  • Utilizzo di Transformers tramite KerasNLP (libreria WIP di livello industriale)
  • Integrazione di Transformers con ConvNets per generare didascalie di immagini
  • Deepdream

Conclusione

In questa breve guida, abbiamo dato un'occhiata al from_logits argomento per le classi di perdita di Keras, che spesso sollevano domande con i nuovi professionisti.

La confusione potrebbe derivare dalla sintassi abbreviata che consente l'aggiunta di livelli di attivazione sopra altri livelli, all'interno della definizione di un livello stesso. Abbiamo finalmente dato un'occhiata a quando impostare l'argomento True or Falsee quando un'uscita deve essere lasciata come logit o passata attraverso una funzione di attivazione come SoftMax.

Timestamp:

Di più da Impilamento