Mikä on "from_logits=True" Keras/TensorFlow Loss Functionsissa? PlatoBlockchain Data Intelligence. Pystysuuntainen haku. Ai.

Mikä on "from_logits=True" Keras/TensorFlow Loss Functionsissa?

Deep Learning -kehykset, kuten Keras, alentavat massojen pääsyn esteitä ja demokratisoivat DL-mallien kehittämisen kokemattomille ihmisille, jotka voivat luottaa kohtuullisiin oletusarvoihin ja yksinkertaistettuihin API-liittymiin kantaakseen raskaiden nostojen taakan ja tuottaa kunnollisia tuloksia.

Yleinen hämmennys syntyy uudempien syväoppimisen harjoittajien välillä, kun käytetään Keras-häviöfunktioita luokitteluun, kuten esim. CategoricalCrossentropy ja SparseCategoricalCrossentropy:

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

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

Mitä from_logits lippu viittaa?

Vastaus on melko yksinkertainen, mutta vaatii tarkastelun verkon tuotosta, jota yritämme luokitella häviöfunktion avulla.

Logiitit ja SoftMax-todennäköisyydet

Lyhyesti sanottuna:

Todennäköisyydet normalisoidaan – eli niillä on väli [0..1]. Logitit eivät ole normalisoituja, ja ne voivat vaihdella välillä [-inf...+inf].

Verkon lähtötasosta riippuen:

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

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

Tulos Dense kerros tulee myöskään palata:

  • todennäköisyydet: Lähtö kulkee SoftMax-funktion läpi, joka normalisoi lähdön todennäköisyyksien joukoksi n, jotka kaikki laskevat yhteen 1.
  • logits: n aktivoinnit.

Tämä väärinkäsitys johtuu mahdollisesti lyhyestä syntaksista, jonka avulla voit lisätä aktivoinnin kerrokseen, näennäisesti yhtenä kerroksena, vaikka se on vain lyhenne sanoista:

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

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

Häviöfunktiolle on ilmoitettava, pitäisikö sen odottaa normalisoitua jakaumaa (lähtö kulkee SoftMax-funktion kautta) vai logitteja. Siksi, from_logits lippu!

Milloin pitäisi from_logits=Totta?

Jos verkkosi normalisoi ulostulotodennäköisyydet, häviöfunktiosi pitäisi asettaa from_logits että False, koska se ei hyväksy logitteja. Tämä on myös oletusarvo kaikille tappioluokille, jotka hyväksyvät lipun, koska useimmat ihmiset lisäävät an activation='softmax' niiden tulostuskerroksiin:

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)

Tämä johtaa:

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)

Koska tämä verkko johtaa normalisoituun jakaumaan – kun lähtöjä verrataan kohdetuloihin ja luokitellaan ne luokitteluhäviöfunktion kautta (oikealle tehtävälle) – sinun pitäisi asettaa from_logits että Falsetai anna oletusarvon pysyä.

Toisaalta, jos verkkosi ei käytä SoftMaxia lähdössä:

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)

Tämä johtaa:

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)

Sinun pitäisi asettaa from_logits että True jotta häviötoiminto käsittelee lähdöt oikein.

Milloin SoftMaxia käytetään lähdössä?

Useimmat harjoittajat käyttävät SoftMaxia tulosteessa normalisoidun todennäköisyysjakauman saamiseksi, koska monissa tapauksissa käytät verkkoa tähän – erityisesti yksinkertaistetussa opetusmateriaalissa. Joissakin tapauksissa sinä kuitenkin älä haluat käyttää funktiota lähtöön, käsitellä sitä eri tavalla ennen SoftMaxin tai muun funktion käyttämistä.

Merkittävä esimerkki tulee NLP-malleista, joissa todella suuren sanaston todennäköisyys voi olla läsnä lähtötensorissa. SoftMaxin levittäminen päälle Ne kaikki ja saada ahneesti argmax ei yleensä tuota kovin hyviä tuloksia.

Jos kuitenkin tarkkailet logitteja, poimi Top-K (jossa K voi olla mikä tahansa luku mutta on tyypillisesti jossain välissä [0...10]) ja vasta sitten SoftMaxin käyttäminen top-k sanaston mahdolliset merkit muuttavat jakelua merkittävästi ja tuottaa yleensä realistisempia tuloksia.

Tutustu käytännönläheiseen, käytännölliseen Gitin oppimisoppaaseemme, jossa on parhaat käytännöt, alan hyväksymät standardit ja mukana tuleva huijauslehti. Lopeta Git-komentojen googlailu ja oikeastaan oppia se!

Tätä kutsutaan Top-K-samplingiksi, ja vaikka se ei olekaan ihanteellinen strategia, se on yleensä huomattavasti parempi kuin ahne otanta.

Jatketaan – Käytännön syvällistä oppimista tietokonenäköön

Utelias luonteesi saa sinut haluamaan pidemmälle? Suosittelemme tutustumaan meidän Kurssi: "Käytännön syvällinen oppiminen tietokonenäön käyttöön Pythonilla".

Toinen tietokonenäkökurssi?

Emme luokittele MNIST-numeroita tai MNIST-muotia. He palvelivat osansa kauan sitten. Liian monet oppimisresurssit keskittyvät perustietosarjoihin ja perusarkkitehtuureihin, ennen kuin edistyneiden black-box-arkkitehtuurien annetaan kantaa suoritustaakka.

Haluamme keskittyä demystifikaatio, käytännöllisyys, ymmärtäminen, intuitio ja oikeita projekteja. Haluan oppia miten voitko vaikuttaa? Viemme sinut matkalle aivomme prosessoinnista kuvien tutkimiseen rintasyövän syväoppimisluokittajan kirjoittamiseen syväoppimisverkostoihin, jotka "halusinoivat", opettaen sinulle periaatteita ja teoriaa käytännön työssä ja varustamalla tietotaitoa ja työkaluja tullaksesi asiantuntijaksi syväoppimisen soveltamisessa tietokonenäön ratkaisemiseen.

Mitä on sisällä?

  • Näön ensimmäiset periaatteet ja kuinka tietokoneet voidaan opettaa "näkemään"
  • Tietokonenäön eri tehtävät ja sovellukset
  • Ammatin työkalut, jotka helpottavat työtäsi
  • Tietokokonaisuuksien etsiminen, luominen ja hyödyntäminen tietokonenäköä varten
  • Konvoluutiohermoverkkojen teoria ja sovellus
  • Verkkotunnuksen siirtymisen, samanaikaisen esiintymisen ja muiden vääristymien käsittely tietojoukoissa
  • Siirrä Oppiminen ja muiden koulutusajan ja laskennallisten resurssien hyödyntäminen hyödyksesi
  • Huippuluokan rintasyövän luokittelijan rakentaminen ja kouluttaminen
  • Kuinka soveltaa tervettä annos skeptisyyttä valtavirran ideoihin ja ymmärtää laajalti käytettyjen tekniikoiden vaikutukset
  • ConvNetin "konseptitilan" visualisointi t-SNE:n ja PCA:n avulla
  • Tapaustutkimuksia siitä, kuinka yritykset käyttävät tietokonenäkötekniikoita parempien tulosten saavuttamiseksi
  • Oikea mallin arviointi, piilevän tilan visualisointi ja mallin huomion tunnistaminen
  • Toimialuetutkimuksen suorittaminen, omien tietojoukkojen käsittely ja mallitestien laatiminen
  • Huippuluokan arkkitehtuurit, ideoiden eteneminen, mikä tekee niistä ainutlaatuisia ja miten ne toteutetaan
  • KerasCV – WIP-kirjasto uusimpien putkien ja mallien luomiseen
  • Kuinka jäsentää ja lukea papereita ja toteuttaa ne itse
  • Mallien valinta sovelluksesi mukaan
  • Luodaan päästä päähän koneoppimisputki
  • Maisema ja intuitio kohteen havaitsemisessa nopeampien R-CNN-, RetinaNet-, SSD- ja YOLO-verkkojen avulla
  • Instanssi ja semanttinen segmentointi
  • Reaaliaikainen objektintunnistus YOLOv5:n avulla
  • YOLOv5-objektitunnistimien koulutus
  • Työskentely Transformersin kanssa KerasNLP:n (teollisuuden vahvuus WIP-kirjasto) avulla
  • Transformersin integrointi ConvNet-verkkojen kanssa kuvien tekstitysten luomiseksi
  • Deepdream

Yhteenveto

Tässä lyhyessä oppaassa olemme tarkastelleet from_logits argumentti Keras-tappioluokkien puolesta, mikä herättää usein kysymyksiä uudemmille harjoittajille.

Hämmennys johtuu mahdollisesti lyhyestä syntaksista, joka sallii aktivointikerrosten lisäämisen muiden kerrosten päälle itse tason määritelmän puitteissa. Olemme vihdoin tarkastelleet, milloin argumentti pitäisi asettaa True or False, ja kun tulos tulee jättää logiteiksi tai ohjata aktivointitoiminnon, kuten SoftMaxin, läpi.

Aikaleima:

Lisää aiheesta Stackabus