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ę do1
. - 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 False
lub 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.