Kaj je 'from_logits=True' v funkcijah izgube Keras/TensorFlow? Podatkovna inteligenca PlatoBlockchain. Navpično iskanje. Ai.

Kaj je 'from_logits=True' v funkcijah izgube Keras/TensorFlow?

Ogrodja globokega učenja, kot je Keras, znižajo vstopno oviro za množice in demokratizirajo razvoj modelov DL za neizkušene ljudi, ki se lahko zanesejo na razumne privzete vrednosti in poenostavljene API-je, da prenesejo breme težkega dela in ustvarijo spodobne rezultate.

Pogosta zmeda nastane med novejšimi izvajalci globokega učenja, ko za klasifikacijo uporabljajo funkcije izgube Keras, kot je npr. CategoricalCrossentropy in SparseCategoricalCrossentropy:

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

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

Kaj počne from_logits zastava nanaša?

Odgovor je dokaj preprost, vendar zahteva pogled na izhod omrežja, ki ga poskušamo oceniti z uporabo funkcije izgube.

Logiti in verjetnosti SoftMax

Kratka zgodba:

Verjetnosti so normalizirane – tj. imajo razpon med [0..1]. Logiti niso normalizirani in imajo lahko razpon med [-inf...+inf].

Odvisno od izhodne plasti vašega omrežja:

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

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

Rezultat Dense plast bo bodisi vrnitev:

  • verjetnosti: Izhod je posredovan prek funkcije SoftMax, ki izhod normalizira v nabor verjetnosti n, kar vse skupaj pomeni 1.
  • logits: n aktivacije.

Ta napačna predstava verjetno izvira iz kratke sintakse, ki vam omogoča, da sloju dodate aktivacijo, na videz kot eno plast, čeprav je le okrajšava za:

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

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

Vaša funkcija izgube mora biti obveščena o tem, ali naj pričakuje normalizirano porazdelitev (izhod, posredovan skozi funkcijo SoftMax) ali logite. Zato je from_logits zastava!

Kdaj naj from_logits=Res?

Če vaše omrežje normalizira izhodne verjetnosti, se mora nastaviti vaša funkcija izgube from_logits do False, ker ne sprejema logit. To je tudi privzeta vrednost vseh razredov izgube, ki sprejmejo zastavico, saj večina ljudi doda activation='softmax' na njihove izhodne plasti:

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)

Rezultat tega je:

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)

Ker ima to omrežje za posledico normalizirano porazdelitev – ko primerjamo izhode s ciljnimi izhodi in jih razvrščamo prek funkcije izgube klasifikacije (za ustrezno nalogo) – morate nastaviti from_logits do False, ali pa naj ostane privzeta vrednost.

Po drugi strani pa, če vaše omrežje ne uporablja SoftMax na izhodu:

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)

Rezultat tega je:

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)

Moral bi nastaviti from_logits do True za funkcijo izgube za pravilno obdelavo izhodov.

Kdaj uporabiti SoftMax na izhodu?

Večina izvajalcev uporabi SoftMax na izhodu, da dobi normalizirano porazdelitev verjetnosti, saj je to v mnogih primerih tisto, za kar boste uporabili omrežje – zlasti v poenostavljenem izobraževalnem gradivu. Vendar pa v nekaterih primerih vi ne želite uporabiti funkcijo za izhod, ga obdelati na drugačen način, preden uporabite SoftMax ali drugo funkcijo.

Pomemben primer izhaja iz modelov NLP, v katerih je v izhodnem tenzorju lahko prisotna resnična verjetnost nad velikim besediščem. Nanašanje SoftMaxa čez vse in pohlepno pridobivanje argmax običajno ne daje zelo dobrih rezultatov.

Vendar, če opazujete logite, izvlecite Top-K (kjer je K lahko poljubno število, vendar je običajno nekje med [0...10]), in šele nato uporabite SoftMax za top-k možni žetoni v besedišču bistveno premaknejo porazdelitev in običajno dajejo bolj realistične rezultate.

Oglejte si naš praktični, praktični vodnik za učenje Gita z najboljšimi praksami, standardi, sprejetimi v panogi, in priloženo goljufijo. Nehajte Googlati ukaze Git in pravzaprav naučiti it!

To je znano kot vzorčenje Top-K in čeprav ni idealna strategija, običajno znatno prekaša pohlepno vzorčenje.

Naprej – Praktično poglobljeno učenje za računalniški vid

Ali zaradi vaše radovedne narave želite iti dlje? Priporočamo, da si ogledate naše Tečaj: »Praktično poglobljeno učenje za računalniški vid s Pythonom«.

Še en tečaj računalniškega vida?

Ne bomo izvajali klasifikacije števk MNIST ali načina MNIST. Svojo so že zdavnaj odslužili. Preveč učnih virov se osredotoča na osnovne nabore podatkov in osnovne arhitekture, preden prepusti naprednim arhitekturam črnih skrinjic breme zmogljivosti.

Želimo se osredotočiti na demistifikacija, praktičnosti, razumevanje, intuicija in pravi projekti. Želim se naučiti kako lahko kaj spremeniš? Popeljali vas bomo od načina, na katerega naši možgani obdelujejo slike, do pisanja raziskovalnega klasifikatorja globokega učenja za raka dojke do omrežij globokega učenja, ki »halucinirajo«, vas naučijo načel in teorije s praktičnim delom ter vas opremijo z znanje in izkušnje ter orodja, da postanete strokovnjak za uporabo globokega učenja za reševanje računalniškega vida.

Kaj je notri?

  • Prva načela vida in kako lahko računalnike naučimo "videti"
  • Različne naloge in aplikacije računalniškega vida
  • Strokovna orodja, ki vam bodo olajšala delo
  • Iskanje, ustvarjanje in uporaba naborov podatkov za računalniški vid
  • Teorija in uporaba konvolucijskih nevronskih mrež
  • Obravnava premikov domene, sopojavljanja in drugih pristranskosti v nizih podatkov
  • Prenos učenja in uporaba časa za usposabljanje in računalniških virov drugih v vašo korist
  • Izdelava in usposabljanje najsodobnejšega klasifikatorja raka dojke
  • Kako uporabiti zdrav odmerek skepticizma za glavne ideje in razumeti posledice splošno sprejetih tehnik
  • Vizualizacija »konceptnega prostora« ConvNet z uporabo t-SNE in PCA
  • Študije primerov o tem, kako podjetja uporabljajo tehnike računalniškega vida za doseganje boljših rezultatov
  • Pravilno vrednotenje modela, vizualizacija latentnega prostora in prepoznavanje pozornosti modela
  • Izvajanje domenskih raziskav, obdelava lastnih naborov podatkov in vzpostavljanje testov modelov
  • Vrhunske arhitekture, razvoj idej, kaj jih dela edinstvene in kako jih uresničiti
  • KerasCV – knjižnica WIP za ustvarjanje najsodobnejših cevovodov in modelov
  • Kako razčleniti in brati prispevke ter jih implementirati sami
  • Izbira modelov glede na vašo aplikacijo
  • Ustvarjanje cevovoda strojnega učenja od konca do konca
  • Pokrajina in intuicija pri zaznavanju predmetov s hitrejšimi R-CNN, RetinaNets, SSD in YOLO
  • Instančna in pomenska segmentacija
  • Prepoznavanje predmetov v realnem času z YOLOv5
  • Usposabljanje detektorjev predmetov YOLOv5
  • Delo s transformatorji z uporabo KerasNLP (industrijska knjižnica WIP)
  • Integracija Transformers s ConvNets za ustvarjanje napisov slik
  • Deepdream

zaključek

V tem kratkem vodniku smo si ogledali from_logits argument za Kerasove izgubne razrede, ki pri novejših izvajalcih pogosto sprožajo vprašanja.

Zmeda verjetno izhaja iz kratke sintakse, ki dovoljuje dodajanje aktivacijskih plasti na druge plasti znotraj definicije same plasti. Končno smo pogledali, na kdaj naj bo argument nastavljen True or False, in kdaj je treba izhod pustiti kot logite ali prenesti skozi aktivacijsko funkcijo, kot je SoftMax.

Časovni žig:

Več od Stackabuse