Co to jest „from_logits=True” w funkcjach utraty Keras/TensorFlow? Analiza danych PlatoBlockchain. Wyszukiwanie pionowe. AI.

Co to jest „from_logits=True” w funkcjach utraty Keras/TensorFlow?

Platformy Deep Learning, takie jak Keras, obniżają barierę wejścia dla mas i demokratyzują opracowywanie modeli DL niedoświadczonym ludziom, którzy mogą polegać na rozsądnych wartościach domyślnych i uproszczonych interfejsach API, aby ponieść ciężar ciężkiego podnoszenia i uzyskać przyzwoite wyniki.

Powszechne zamieszanie pojawia się między nowszymi praktykami głębokiego uczenia się, gdy używają funkcji straty Keras do klasyfikacji, takich jak CategoricalCrossentropy i SparseCategoricalCrossentropy:

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

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

Co robi from_logits flaga odnosi się do?

Odpowiedź jest dość prosta, ale wymaga spojrzenia na wynik sieci, którą próbujemy oceniać za pomocą funkcji straty.

Logity i prawdopodobieństwo SoftMax

Krótko mówiąc:

Prawdopodobieństwa są znormalizowane – tzn. mają zakres pomiędzy [0..1]. Logity nie są znormalizowane i mogą mieć zakres między [-inf...+inf].

W zależności od warstwy wyjściowej Twojej sieci:

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

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

Dane wyjściowe Dense warstwa będzie bądź powrót:

  • prawdopodobieństwa: Dane wyjściowe są przekazywane przez funkcję SoftMax, która normalizuje dane wyjściowe do zbioru prawdopodobieństw powyżej n, które sumują się do 1.
  • logity: n aktywacje.

To błędne przekonanie może wynikać ze skróconej składni, która pozwala dodać aktywację do warstwy, pozornie jako pojedyncza warstwa, chociaż jest to tylko skrót od:

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

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

Twoja funkcja straty musi zostać poinformowana, czy powinna oczekiwać rozkładu znormalizowanego (wyjście przekazane przez funkcję SoftMax) czy logitów. Stąd from_logits flaga!

Kiedy należy from_logits=Prawda?

Jeśli twoja sieć normalizuje prawdopodobieństwa wyjściowe, twoja funkcja strat powinna zostać ustawiona from_logits do False, ponieważ nie przyjmuje logitów. Jest to również domyślna wartość wszystkich klas strat, które akceptują flagę, ponieważ większość ludzi dodaje an activation='softmax' do ich warstw wyjściowych:

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)

To skutkuje:

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)

Ponieważ ta sieć prowadzi do znormalizowanego rozkładu – przy porównywaniu wyników z docelowymi i ocenianiu ich za pomocą klasyfikacyjnej funkcji straty (dla odpowiedniego zadania) – powinieneś ustawić from_logits do Falselub pozostaw wartość domyślną.

Z drugiej strony, jeśli twoja sieć nie stosuje SoftMax na wyjściu:

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)

To skutkuje:

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)

Musisz ustawić from_logits do True aby funkcja straty właściwie traktowała wyjścia.

Kiedy używać SoftMax na wyjściu?

Większość praktyków stosuje SoftMax na wyjściu, aby uzyskać znormalizowany rozkład prawdopodobieństwa, ponieważ w wielu przypadkach do tego właśnie będziesz używał sieci – zwłaszcza w uproszczonych materiałach edukacyjnych. Jednak w niektórych przypadkach nie chcesz zastosować funkcję do wyjścia, aby przetworzyć ją w inny sposób przed zastosowaniem SoftMax lub innej funkcji.

Godny uwagi przykład pochodzi z modeli NLP, w których w tensorze wyjściowym może występować prawdopodobieństwo w przypadku dużego słownika. Stosowanie SoftMax ponad wszyscy i łapczywie zdobywają argmax zazwyczaj nie daje bardzo dobrych wyników.

Jeśli jednak obserwujesz logity, wyodrębnij Top-K (gdzie K może być dowolną liczbą, ale zwykle jest gdzieś pomiędzy [0...10]), a dopiero potem nałożenie SoftMax na góra-k możliwe tokeny w słowniku znacznie przesuwają rozkład i zwykle dają bardziej realistyczne wyniki.

Zapoznaj się z naszym praktycznym, praktycznym przewodnikiem dotyczącym nauki Git, zawierającym najlepsze praktyki, standardy przyjęte w branży i dołączoną ściągawkę. Zatrzymaj polecenia Google Git, a właściwie uczyć się to!

Jest to znane jako próbkowanie Top-K i chociaż nie jest to idealna strategia, zwykle znacznie przewyższa próbkowanie zachłanne.

Idąc dalej – praktyczne uczenie głębokie dla wizji komputerowej

Twoja dociekliwość sprawia, że ​​chcesz iść dalej? Zalecamy sprawdzenie naszego Kurs: „Praktyczne uczenie głębokie dla widzenia komputerowego z Pythonem”.

Kolejny kurs na temat wizji komputerowej?

Nie będziemy robić klasyfikacji cyfr MNIST ani mody MNIST. Swoją rolę pełnili dawno temu. Zbyt wiele zasobów edukacyjnych koncentruje się na podstawowych zestawach danych i podstawowych architekturach, zanim zaawansowane architektury czarnoskrzynkowe poniosą ciężar wydajności.

Chcemy się skupić demistyfikacja, praktyczność, zrozumienie, intuicja i realne projekty. Chcieć się nauczyć w jaki sposób możesz zrobić różnicę? Zabierzemy Cię na przejażdżkę od sposobu, w jaki nasze mózgi przetwarzają obrazy, przez pisanie klasyfikatora głębokiego uczenia się na poziomie badań naukowych w zakresie raka piersi, do sieci głębokiego uczenia się, które „halucynują”, ucząc Cię zasad i teorii poprzez praktyczną pracę, wyposażając Cię w know-how i narzędzia, aby stać się ekspertem w stosowaniu uczenia głębokiego do rozwiązywania wizji komputerowych.

Co jest w środku?

  • Pierwsze zasady widzenia i jak nauczyć komputery „widzieć”
  • Różne zadania i zastosowania wizji komputerowej
  • Narzędzia handlu, które ułatwią Ci pracę
  • Znajdowanie, tworzenie i wykorzystywanie zbiorów danych do wizji komputerowej
  • Teoria i zastosowanie splotowych sieci neuronowych
  • Obsługa zmiany domeny, współwystępowania i innych błędów w zbiorach danych
  • Transfer uczenia się i wykorzystanie czasu szkolenia innych i zasobów obliczeniowych dla Twojej korzyści
  • Budowanie i szkolenie najnowocześniejszego klasyfikatora raka piersi
  • Jak zastosować zdrową dawkę sceptycyzmu do głównych idei i zrozumieć konsekwencje powszechnie stosowanych technik?
  • Wizualizacja „przestrzeni koncepcyjnej” ConvNet za pomocą t-SNE i PCA
  • Studia przypadków, w jaki sposób firmy wykorzystują techniki widzenia komputerowego do osiągania lepszych wyników
  • Właściwa ocena modelu, wizualizacja przestrzeni utajonej i identyfikacja uwagi modelu
  • Wykonywanie badań domenowych, przetwarzanie własnych zbiorów danych i tworzenie testów modelowych
  • Najnowocześniejsze architektury, progresja pomysłów, co czyni je wyjątkowymi i jak je wdrażać
  • KerasCV – biblioteka WIP do tworzenia najnowocześniejszych rurociągów i modeli
  • Jak analizować i czytać artykuły i samodzielnie je wdrażać
  • Wybór modeli w zależności od aplikacji
  • Tworzenie kompleksowego procesu uczenia maszynowego
  • Krajobraz i intuicja w wykrywaniu obiektów za pomocą szybszych sieci R-CNN, sieci RetinaNet, dysków SSD i YOLO
  • Segmentacja instancyjna i semantyczna
  • Rozpoznawanie obiektów w czasie rzeczywistym za pomocą YOLOv5
  • Szkolenie wykrywaczy obiektów YOLOv5
  • Praca z transformatorami przy użyciu KerasNLP (biblioteka przemysłowa WIP)
  • Integracja Transformers z ConvNets w celu generowania podpisów obrazów
  • DeepDream

Wnioski

W tym krótkim przewodniku przyjrzeliśmy się from_logits argument na rzecz klas strat Keras, które często rodzą pytania u nowszych praktyków.

Zamieszanie może wynikać ze skróconej składni, która umożliwia dodawanie warstw aktywacyjnych na wierzchu innych warstw, w ramach definicji samej warstwy. W końcu przyjrzeliśmy się, kiedy argument powinien być ustawiony na True or False, oraz kiedy dane wyjściowe powinny być pozostawione jako logity lub przekazane przez funkcję aktywacji, taką jak SoftMax.

Znak czasu:

Więcej z Nadużycie stosu