Was ist 'from_logits=True' in Keras/TensorFlow-Verlustfunktionen? PlatoBlockchain-Datenintelligenz. Vertikale Suche. Ai.

Was ist 'from_logits=True' in Keras/TensorFlow-Verlustfunktionen?

Deep-Learning-Frameworks wie Keras senken die Eintrittsbarriere für die Massen und demokratisieren die Entwicklung von DL-Modellen für unerfahrene Leute, die sich auf vernünftige Standardeinstellungen und vereinfachte APIs verlassen können, um die Hauptlast des schweren Hebens zu tragen und anständige Ergebnisse zu erzielen.

Eine häufige Verwirrung entsteht unter neueren Deep-Learning-Praktikern, wenn Keras-Verlustfunktionen zur Klassifizierung verwendet werden, wie z CategoricalCrossentropy und SparseCategoricalCrossentropy:

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

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

Was tut der, die, das from_logits Flagge beziehen?

Die Antwort ist ziemlich einfach, erfordert aber einen Blick auf die Ausgabe des Netzwerks, das wir mit der Verlustfunktion zu klassifizieren versuchen.

Logits und SoftMax-Wahrscheinlichkeiten

Um es kurz zu machen:

Wahrscheinlichkeiten sind normalisiert – dh haben eine Spanne dazwischen [0..1]. Logits sind nicht normalisiert und können einen Bereich dazwischen haben [-inf...+inf].

Abhängig von der Ausgangsschicht Ihres Netzwerks:

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

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

Die Ausgabe der Dense Schicht wird entweder Rückkehr:

  • Wahrscheinlichkeiten: Die Ausgabe wird durch eine SoftMax-Funktion geleitet, die die Ausgabe in einen Satz von Wahrscheinlichkeiten über normalisiert n, das alles summiert sich 1.
  • Protokolle: n Aktivierungen.

Dieses Missverständnis ergibt sich möglicherweise aus der Kurzschreibweise, mit der Sie einer Ebene eine Aktivierung hinzufügen können. scheinbar als einzelne Schicht, obwohl es nur eine Abkürzung für ist:

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

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

Ihre Verlustfunktion muss darüber informiert werden, ob sie eine normalisierte Verteilung (Ausgabe durch eine SoftMax-Funktion geleitet) oder Logits erwarten soll. Daher die from_logits Flagge!

Wann sollte from_logits=Wahr?

Wenn Ihr Netzwerk die Ausgabewahrscheinlichkeiten normalisiert, sollte Ihre Verlustfunktion gesetzt sein from_logits zu False, da es keine Logits akzeptiert. Dies ist auch der Standardwert aller Verlustklassen, die das Flag akzeptieren, da die meisten Leute ein hinzufügen activation='softmax' zu ihren Ausgabeschichten:

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)

Das führt zu:

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)

Da dieses Netz zu einer normierten Verteilung führt – bei Vergleich der Leistungen mit Soll-Leistungen und Einstufung über eine Klassifikationsverlustfunktion (für die entsprechende Aufgabe) – du solltest einstellen from_logits zu False, oder belassen Sie den Standardwert.

Wenn Ihr Netzwerk andererseits SoftMax nicht auf die Ausgabe anwendet:

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)

Das führt zu:

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)

Sie müssten einstellen from_logits zu True damit die Verlustfunktion die Ausgänge richtig behandelt.

Wann sollte SoftMax für die Ausgabe verwendet werden?

Die meisten Praktiker wenden SoftMax auf die Ausgabe an, um eine normalisierte Wahrscheinlichkeitsverteilung zu erhalten, da dies in vielen Fällen das ist, wofür Sie ein Netzwerk verwenden werden – insbesondere in vereinfachtem Lehrmaterial. In einigen Fällen jedoch Sie nicht die Funktion auf die Ausgabe anwenden möchten, um sie auf andere Weise zu verarbeiten, bevor Sie entweder SoftMax oder eine andere Funktion anwenden.

Ein bemerkenswertes Beispiel kommt von NLP-Modellen, bei denen tatsächlich die Wahrscheinlichkeit über ein großes Vokabular im Ausgabetensor vorhanden sein kann. Anwenden von SoftMax vorbei alle von ihnen und gierig immer die argmax bringt in der Regel keine sehr guten Ergebnisse.

Wenn Sie jedoch die Logits beobachten, extrahieren Sie das Top-K (wobei K eine beliebige Zahl sein kann, aber normalerweise irgendwo dazwischen liegt [0...10]) und erst dann SoftMax auf die anwenden top-k Mögliche Token im Vokabular verschiebt die Verteilung erheblich und führt normalerweise zu realistischeren Ergebnissen.

Sehen Sie sich unseren praxisnahen, praktischen Leitfaden zum Erlernen von Git an, mit Best Practices, branchenweit akzeptierten Standards und einem mitgelieferten Spickzettel. Hören Sie auf, Git-Befehle zu googeln und tatsächlich in Verbindung, um es!

Dies ist als Top-K-Sampling bekannt, und obwohl es nicht die ideale Strategie ist, übertrifft es das Greedy-Sampling normalerweise erheblich.

Weiter gehen – Praktisches Deep Learning für Computer Vision

Ihre neugierige Natur macht Lust auf mehr? Wir empfehlen Ihnen, sich unsere anzuschauen Kurs: „Praxisnahes Deep Learning für Computer Vision mit Python“.

Ein weiterer Computer Vision-Kurs?

Wir werden keine Klassifizierung von MNIST-Ziffern oder MNIST-Mode durchführen. Sie haben ihren Teil vor langer Zeit erfüllt. Zu viele Lernressourcen konzentrieren sich auf grundlegende Datensätze und grundlegende Architekturen, bevor fortgeschrittene Blackbox-Architekturen die Last der Leistung schultern.

Wir wollen uns konzentrieren Entmystifizierung, Praktikabilität, Verständnis, Intuition und echte Projekte. Möchte lernen wie du kannst einen Unterschied machen? Wir nehmen Sie mit auf eine Reise von der Art und Weise, wie unser Gehirn Bilder verarbeitet, über das Schreiben eines forschungstauglichen Deep-Learning-Klassifikators für Brustkrebs bis hin zu Deep-Learning-Netzwerken, die „halluzinieren“, Ihnen die Prinzipien und die Theorie durch praktische Arbeit beibringen und Sie mit dem ausstatten Know-how und Tools, um ein Experte für die Anwendung von Deep Learning zur Lösung von Computer Vision zu werden.

Was ist da drin?

  • Die ersten Prinzipien des Sehens und wie Computern das „Sehen“ beigebracht werden kann
  • Verschiedene Aufgaben und Anwendungen von Computer Vision
  • Das Handwerkszeug, das Ihnen die Arbeit erleichtert
  • Suchen, Erstellen und Verwenden von Datensätzen für Computer Vision
  • Die Theorie und Anwendung von Convolutional Neural Networks
  • Umgang mit Domänenverschiebung, Kookkurrenz und anderen Verzerrungen in Datensätzen
  • Übertragen Sie Lernen und nutzen Sie die Trainingszeit und Rechenressourcen anderer zu Ihrem Vorteil
  • Aufbau und Schulung eines hochmodernen Brustkrebsklassifikators
  • Wie man Mainstream-Ideen mit einer gesunden Portion Skepsis begegnet und die Auswirkungen weit verbreiteter Techniken versteht
  • Visualisierung des „Konzeptraums“ eines ConvNet mit t-SNE und PCA
  • Fallstudien darüber, wie Unternehmen Computer-Vision-Techniken einsetzen, um bessere Ergebnisse zu erzielen
  • Richtige Modellbewertung, Visualisierung des latenten Raums und Identifizierung der Aufmerksamkeit des Modells
  • Durchführen von Domänenrecherchen, Bearbeiten eigener Datensätze und Etablieren von Modelltests
  • Modernste Architekturen, die Weiterentwicklung von Ideen, was sie einzigartig macht und wie man sie umsetzt
  • KerasCV – eine WIP-Bibliothek zum Erstellen hochmoderner Pipelines und Modelle
  • Wie man Papiere parst, liest und selbst umsetzt
  • Modellauswahl je nach Anwendung
  • Erstellen einer End-to-End-Pipeline für maschinelles Lernen
  • Landschaft und Intuition zur Objekterkennung mit Faster R-CNNs, RetinaNets, SSDs und YOLO
  • Instanz- und semantische Segmentierung
  • Objekterkennung in Echtzeit mit YOLOv5
  • Training von YOLOv5-Objektdetektoren
  • Arbeiten mit Transformers unter Verwendung von KerasNLP (industriestarke WIP-Bibliothek)
  • Integrieren von Transformers in ConvNets zum Generieren von Bildunterschriften
  • DeepDream

Zusammenfassung

In dieser kurzen Anleitung haben wir einen Blick darauf geworfen from_logits Argument für Keras Loss Classes, was bei neueren Praktizierenden oft Fragen aufwirft.

Die Verwirrung ergibt sich möglicherweise aus der abgekürzten Syntax, die das Hinzufügen von Aktivierungsschichten über anderen Schichten innerhalb der Definition einer Schicht selbst erlaubt. Wir haben endlich einen Blick darauf geworfen, wann das Argument gesetzt werden sollte True or False, und wann eine Ausgabe als Logits belassen oder durch eine Aktivierungsfunktion wie SoftMax geleitet werden soll.

Zeitstempel:

Mehr von Stapelmissbrauch