Mis on 'from_logits=True' Kerase/TensorFlow Loss Funktsioonides? PlatoBlockchaini andmete luure. Vertikaalne otsing. Ai.

Mis on 'from_logits=True' Kerase/TensorFlow Loss Funktsioonides?

Süvaõppe raamistikud, nagu Keras, vähendavad masside sisenemise barjääri ja demokratiseerivad DL-mudelite väljatöötamise kogenematute inimeste jaoks, kes saavad tugineda mõistlikele vaikeseadetele ja lihtsustatud API-dele, et kanda raskete tõstmiste raskust ja anda korralikke tulemusi.

Levinud segadus tekib uuemate süvaõppe praktikute vahel, kui kasutatakse klassifitseerimiseks Kerase kadufunktsioone, näiteks CategoricalCrossentropy ja SparseCategoricalCrossentropy:

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

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

Mida teeb from_logits lipp viidata?

Vastus on üsna lihtne, kuid nõuab pilku selle võrgu väljundile, mida proovime kadufunktsiooni kasutades hinnata.

Logitid ja SoftMaxi tõenäosused

Lühike lugu:

Tõenäosused on normaliseeritud – st nende vahemik on nende vahel [0..1]. Logiteid ei ole normaliseeritud ja nende vahemik võib olla vahemikus [-inf...+inf].

Sõltuvalt teie võrgu väljundkihist:

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

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

Väljund Dense kiht tahe kumbki tagasi:

  • tõenäosused: Väljund juhitakse läbi SoftMaxi funktsiooni, mis normaliseerib väljundi tõenäosuste komplektiks n, mis kõik kokku annab 1.
  • logits: n aktiveerimised.

See eksiarvamus tuleneb tõenäoliselt lühisüntaksist, mis võimaldab teil lisada kihile aktiveerimise, näiliselt ühe kihina, kuigi see on lihtsalt lühend järgmistest sõnadest:

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

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

Teie kahjufunktsiooni tuleb teavitada sellest, kas see peaks ootama normaliseeritud jaotust (väljund, mis läbib funktsiooni SoftMax) või logite. Seega, from_logits lipp!

Millal peaks from_logits=Tõsi?

Kui teie võrk normaliseerib väljundi tõenäosust, peaks teie kadumise funktsioon seadistama from_logits et False, kuna see ei aktsepteeri logiteid. See on ka kõigi lippu aktsepteerivate kahjuklasside vaikeväärtus, kuna enamik inimesi lisab activation='softmax' nende väljundkihtidele:

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)

Selle tulemuseks on:

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)

Kuna selle võrgu tulemuseks on normaliseeritud jaotus – kui võrrelda väljundeid sihtväljunditega ja liigitada neid klassifikatsioonikao funktsiooni kaudu (sobiva ülesande jaoks), peaksite määrama from_logits et Falsevõi jätke vaikeväärtus püsima.

Teisest küljest, kui teie võrk ei rakenda väljundis SoftMaxi:

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)

Selle tulemuseks on:

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)

Peaksid seadistama from_logits et True et kadufunktsioon saaks väljundeid korralikult käsitleda.

Millal kasutada väljundis SoftMaxi?

Enamik praktikuid rakendab väljundis SoftMaxi, et anda normaliseeritud tõenäosusjaotus, kuna paljudel juhtudel kasutate võrku selleks – eriti lihtsustatud õppematerjalide puhul. Kuid mõnel juhul te ei soovite funktsiooni väljundile rakendada, et seda enne SoftMaxi või mõne muu funktsiooni rakendamist muul viisil töödelda.

Märkimisväärne näide pärineb NLP mudelitest, mille puhul võib väljundtensoris esineda suure sõnavara ületamise tõenäosus. SoftMaxi pealekandmine kõik nemad ja ahnelt saada argmax ei anna tavaliselt väga häid tulemusi.

Kui aga jälgite logiteid, eraldage Top-K (kus K võib olla suvaline arv, kuid tavaliselt on see kuskil vahepeal [0...10]) ja alles seejärel rakendades SoftMaxi top-k võimalikud märgid sõnavaras nihutavad jaotust oluliselt ja annavad tavaliselt realistlikumaid tulemusi.

Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!

Seda nimetatakse Top-K valimivõtuks ja kuigi see pole ideaalne strateegia, ületab see tavaliselt märkimisväärselt ahne valimi.

Edasiminek – praktiline süvaõpe arvutinägemise jaoks

Sinu uudishimulik loomus tekitab sinus soovi minna kaugemale? Soovitame tutvuda meiega Kursus: "Praktiline süvaõpe arvutinägemise jaoks Pythoniga".

Veel üks arvutinägemise kursus?

Me ei klassifitseeri MNIST-i numbreid ega MNIST-moodi. Nad teenisid oma osa juba ammu. Liiga paljud õpperessursid keskenduvad põhiandmekogumitele ja põhiarhitektuuridele, enne kui lasevad täiustatud musta kasti arhitektuurid jõudluskoormuse enda kanda võtta.

Tahame keskenduda demüstifitseerimine, praktilisus, mõistmine, intuitsioon ja tõelisi projekte. Tahad õppida kuidas saate midagi muuta? Viime teid teele alates viisist, kuidas meie aju töötleb pilte, kuni rinnavähi süvaõppe klassifikaatori kirjutamiseni kuni süvaõppevõrgustikeni, mis "hallutsineerivad", õpetades teile põhimõtteid ja teooriat praktilise töö kaudu, varustades teid oskusteavet ja tööriistu, et saada eksperdiks süvaõppe rakendamisel arvutinägemise lahendamisel.

Mis seal sees on?

  • Nägemise esimesed põhimõtted ja see, kuidas arvuteid saab õpetada nägema
  • Arvutinägemise erinevad ülesanded ja rakendused
  • Tööriistad, mis muudavad teie töö lihtsamaks
  • Arvutinägemise andmestike otsimine, loomine ja kasutamine
  • Konvolutsiooniliste närvivõrkude teooria ja rakendus
  • Domeeni nihke, koosesinemise ja muude andmekogumite eelarvamuste käsitlemine
  • Teisaldage õppimine ja teiste koolitusaja ja arvutusressursside kasutamine teie kasuks
  • Kaasaegse rinnavähi klassifikaatori ehitamine ja väljaõpe
  • Kuidas rakendada tervet annust skepsist peavoolu ideede suhtes ja mõista laialdaselt kasutusele võetud tehnikate mõju
  • ConvNeti "kontseptsiooniruumi" visualiseerimine t-SNE ja PCA abil
  • Juhtumiuuringud, kuidas ettevõtted kasutavad arvutinägemise tehnikaid paremate tulemuste saavutamiseks
  • Mudeli nõuetekohane hindamine, varjatud ruumi visualiseerimine ja mudeli tähelepanu tuvastamine
  • Domeeniuuringu läbiviimine, oma andmekogumite töötlemine ja mudelitestide loomine
  • Tipptasemel arhitektuurid, ideede edenemine, mis teeb need ainulaadseks ja kuidas neid ellu viia
  • KerasCV – WIP-teek tipptasemel torujuhtmete ja mudelite loomiseks
  • Kuidas töid sõeluda ja lugeda ning neid ise rakendada
  • Mudelite valimine sõltuvalt teie rakendusest
  • Täieliku masinõppe torujuhtme loomine
  • Maastik ja intuitsioon objektide tuvastamisel kiiremate R-CNN-ide, RetinaNetside, SSD-de ja YOLO-ga
  • Eksemplar ja semantiline segmenteerimine
  • Reaalajas objektituvastus YOLOv5-ga
  • YOLOv5 objektidetektorite koolitamine
  • Transformeritega töötamine KerasNLP-ga (tööstuse tugev WIP-teek)
  • Transformerite integreerimine ConvNetsiga, et luua piltide pealdised
  • Deepdream

Järeldus

Selles lühikeses juhendis oleme heitnud pilgu from_logits Kerase kahjuklasside argument, mis sageli tekitab uuemates praktikutes küsimusi.

Segadus võib tekkida lühisüntaksist, mis võimaldab kihi enda definitsiooni piires lisada teiste kihtide peale aktiveerimiskihte. Vaatasime lõpuks üle, millal argumendile tuleks seada True or Falseja kui väljund tuleks jätta logitideks või läbida aktiveerimisfunktsiooni, nagu SoftMax.

Ajatempel:

Veel alates Stackabus