Ce este „from_logits=True” în funcțiile Keras/TensorFlow Loss? PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Ce este „from_logits=True” în funcțiile Keras/TensorFlow Loss?

Cadrele de învățare profundă precum Keras reduc bariera de intrare pentru mase și democratizează dezvoltarea modelelor DL ​​pentru oamenii neexperimentați, care se pot baza pe valori implicite rezonabile și API-uri simplificate pentru a suporta greutățile și pentru a produce rezultate decente.

O confuzie comună apare între practicienii mai noi de învățare profundă atunci când folosesc funcțiile de pierdere Keras pentru clasificare, cum ar fi CategoricalCrossentropy și SparseCategoricalCrossentropy:

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

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

Ce face from_logits se referă la steag?

Răspunsul este destul de simplu, dar necesită o privire la ieșirea rețelei pe care încercăm să o evaluăm folosind funcția de pierdere.

Probabilități Logits și SoftMax

Poveste lungă scurtă:

Probabilitățile sunt normalizate – adică au un interval între [0..1]. Logiturile nu sunt normalizate și pot avea o gamă între [-inf...+inf].

În funcție de nivelul de ieșire al rețelei dvs.:

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

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

Ieșirea fișierului Dense stratul va oricare întoarcere:

  • probabilități: Ieșirea este trecută printr-o funcție SoftMax care normalizează rezultatul într-un set de probabilități peste n, toate acestea se însumează 1.
  • logits: n activări.

Această concepție greșită poate apărea din sintaxa scurtă care vă permite să adăugați o activare la un strat, aparent ca un singur strat, chiar dacă este doar prescurtare pentru:

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

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

Funcția dvs. de pierdere trebuie să fie informată dacă ar trebui să se aștepte la o distribuție normalizată (ieșire transmisă printr-o funcție SoftMax) sau logits. Prin urmare, cel from_logits steag!

Când ar trebui from_logits=Adevărat?

Dacă rețeaua normalizează probabilitățile de ieșire, funcția de pierdere ar trebui să se stabilească from_logits la False, deoarece nu acceptă logits. Aceasta este, de asemenea, valoarea implicită a tuturor claselor de pierderi care acceptă steag, deoarece majoritatea oamenilor adaugă un activation='softmax' la straturile lor de ieșire:

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)

Rezultă:

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)

Deoarece această rețea are ca rezultat o distribuție normalizată - atunci când se compară ieșirile cu ieșirile țintă și le clasifică printr-o funcție de pierdere de clasificare (pentru sarcina corespunzătoare) - ar trebui să setați from_logits la False, sau lăsați valoarea implicită să rămână.

Pe de altă parte, dacă rețeaua dvs. nu aplică SoftMax la ieșire:

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)

Rezultă:

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)

Ar trebui să setați from_logits la True pentru ca funcția de pierdere să trateze corect ieșirile.

Când să utilizați SoftMax la ieșire?

Majoritatea practicienilor aplică SoftMax la ieșire pentru a oferi o distribuție normalizată a probabilității, deoarece aceasta este în multe cazuri pentru care veți folosi o rețea – în special în materialele educaționale simplificate. Cu toate acestea, în unele cazuri, dvs nu doriți să aplicați funcția la ieșire, să o procesați într-un mod diferit înainte de a aplica fie SoftMax, fie altă funcție.

Un exemplu notabil vine din modelele NLP, în care probabilitatea unui vocabular mare poate fi prezentă în tensorul de ieșire. Aplicarea SoftMax peste toti și obținând cu lăcomie argmax de obicei nu produce rezultate foarte bune.

Cu toate acestea, dacă observați logit-urile, extrageți Top-K (unde K poate fi orice număr, dar este de obicei undeva între [0...10]), și abia apoi aplicarea SoftMax la sus-k posibilele simboluri din vocabular modifică distribuția în mod semnificativ și, de obicei, produce rezultate mai realiste.

Consultați ghidul nostru practic și practic pentru a învăța Git, cu cele mai bune practici, standarde acceptate de industrie și fisa de cheat incluse. Opriți căutarea pe Google a comenzilor Git și de fapt învăţa aceasta!

Aceasta este cunoscută sub denumirea de eșantionare Top-K și, deși nu este strategia ideală, de obicei depășește semnificativ eșantionarea lacomă.

Mergând mai departe – Învățare profundă practică pentru viziunea computerizată

Natura ta curios te face să vrei să mergi mai departe? Vă recomandăm să verificați Curs: „Învățare profundă practică pentru viziunea computerizată cu Python”.

Un alt curs de Computer Vision?

Nu vom face clasificarea cifrelor MNIST sau a modei MNIST. Și-au servit rolul cu mult timp în urmă. Prea multe resurse de învățare se concentrează pe seturile de date de bază și pe arhitecturile de bază înainte de a lăsa arhitecturile avansate de tip cutie neagră să asume povara performanței.

Vrem să ne concentrăm asupra demistificare, practic, înţelegere, intuiţie și proiecte reale. Vreau sa invat cum poți face o diferență? Vă vom duce într-o plimbare de la modul în care creierul nostru procesează imaginile până la scrierea unui clasificator de învățare profundă de nivel de cercetare pentru cancerul de sân la rețele de învățare profundă care „halucinează”, învățându-vă principiile și teoria prin muncă practică, echipându-vă cu know-how și instrumente pentru a deveni un expert în aplicarea învățării profunde pentru a rezolva viziunea computerizată.

Ce e inauntru?

  • Primele principii ale vederii și modul în care computerele pot fi învățate să „vadă”
  • Diferite sarcini și aplicații ale vederii computerizate
  • Instrumentele meseriei care vă vor ușura munca
  • Găsirea, crearea și utilizarea seturilor de date pentru viziune computerizată
  • Teoria și aplicarea rețelelor neuronale convoluționale
  • Gestionarea deplasării de domeniu, apariției concomitente și a altor părtiniri în seturile de date
  • Transfer Învățați și utilizați timpul de instruire și resursele de calcul ale altora în beneficiul dumneavoastră
  • Construirea și formarea unui clasificator de ultimă generație pentru cancerul de sân
  • Cum să aplicați o doză sănătoasă de scepticism ideilor principale și să înțelegeți implicațiile tehnicilor adoptate pe scară largă
  • Vizualizarea unui „spațiu conceptual” al unui ConvNet folosind t-SNE și PCA
  • Studii de caz despre modul în care companiile folosesc tehnicile de viziune computerizată pentru a obține rezultate mai bune
  • Evaluarea corectă a modelului, vizualizarea spațiului latent și identificarea atenției modelului
  • Efectuarea cercetărilor de domeniu, procesarea propriilor seturi de date și stabilirea de teste de model
  • Arhitecturi de ultimă oră, progresul ideilor, ce le face unice și cum să le implementăm
  • KerasCV – o bibliotecă WIP pentru crearea de conducte și modele de ultimă generație
  • Cum să analizați și să citiți lucrările și să le implementați singur
  • Selectarea modelelor în funcție de aplicația dvs
  • Crearea unui canal de învățare automată de la capăt la capăt
  • Peisaj și intuiție în detectarea obiectelor cu R-CNN-uri mai rapide, RetinaNets, SSD-uri și YOLO
  • Instanță și segmentare semantică
  • Recunoașterea obiectelor în timp real cu YOLOv5
  • Instruirea detectoarelor de obiecte YOLOv5
  • Lucrul cu Transformers folosind KerasNLP (bibliotecă WIP puternică în industrie)
  • Integrarea Transformers cu ConvNets pentru a genera subtitrări ale imaginilor
  • Deepdream

Concluzie

În acest scurt ghid, am aruncat o privire asupra from_logits argument pentru cursurile de pierdere Keras, care deseori ridică întrebări practicienilor mai noi.

Confuzia poate apărea din sintaxa scurtă care permite adăugarea de straturi de activare peste alte straturi, în cadrul definiției unui strat în sine. În sfârșit, ne-am uitat la momentul în care ar trebui setat argumentul True or False, și când o ieșire ar trebui lăsată ca logits sau trecută printr-o funcție de activare, cum ar fi SoftMax.

Timestamp-ul:

Mai mult de la Stackabuse