Mitä ovat autokooderit?
On 11 marraskuun, 2021 by adminHelppo johdatus autokooderiin ja sen eri sovelluksiin. Myös näissä opetusohjelmissa käytetään tf.keras,TensorFlow’n korkean tason Python API:ta syväoppimismallien rakentamiseen ja kouluttamiseen.
常常見到 Autoencoder 的變形以及應用,打算花幾篇的時間好好的研究一下,順便練習 Tensorflow.keras 的 API 使用。
- Mikä on autokooderi
- Autokooderin tyypit
- Autokooderin sovellus
- Toteutus
- Toteutus
- Suuret esimerkit
- Johtopäätös
Vaikeusaste: ★ ★ ☆ ☆ ☆ ☆
後記: 由於 Tensorflow 2.0 alpha 已於 3/8號釋出,但此篇是在1月底完成的,故大家可以直接使用安裝使用看看,但需要更新至相對應的 CUDA10。
Mikä on Autoencoder?
首先,什麼是 Autoencoder 呢? 不囉唆,先看圖吧! 不囉唆,先看圖吧!

Autokooderin alkuperäinen konsepti on hyvin yksinkertainen, se on syöttää syöttötiedot ja saada täsmälleen samat tiedot kuin syöttötiedot neuraalisen verkon avulla.Kooderi ottaa ensin vastaan syötetyn datan, pakkaa sen pienemmän ulottuvuuden vektoriksi Z ja syöttää sitten Z:n dekooderiin, joka palauttaa Z:n alkuperäiseen kokoonsa.Tämä kuulostaa helpolta, mutta katsotaanpa tarkemmin, onko se todella niin helppoa.

Encoder:
Encoder on vastuussa alkuperäisen syöttötiedon pakkaamisesta matalaulotteiseksi vektoriksi C. Tätä C:tä, jota kutsumme yleensä koodiksi, latentiksi vektoriksi tai ominaisuusvektoriksi, mutta olen tottunut kutsumaan sitä latentiksi avaruudeksi, koska C edustaa piilotettua ominaisuutta.Kooderi voi pakata alkuperäisen datan mielekkääksi matalaulotteiseksi vektoriksi, mikä tarkoittaa, että Autoencoderilla on ulottuvuuden vähentäminen, ja piilokerroksessa on epälineaarinen muunnosaktivointi, joten tämä kooderi on kuin tehokas versio PCA:sta, koska kooderi voi tehdä epälineaarisen muunnoksen.ulottuvuuden vähentäminen!
Decoder:
Decoder palauttaa latenttiavaruuden takaisin syöttöaineistoon niin pitkälle kuin mahdollista, mikä on ominaisvektoreiden muunnos alempiulotteisesta avaruudesta korkeampiulotteiseen avaruuteen.
Miten siis mitataan kuinka hyvin Autoencoder toimii ! Yksinkertaisesti vertaamalla kahden alkuperäisen syöttötiedon ja rekonstruoidun tiedon samankaltaisuutta.Joten tappiofunktiomme voidaan kirjoittaa seuraavasti: ….AutoEncoder koulutetaan käyttämällä backpropagation-menetelmää painojen päivittämiseksi, aivan kuten tavallisessa neuroverkossa.päivittää painot.
Yhteenvetona voidaan todeta, että Autoencoder on osoitteessa …..
1. hyvin yleinen malliarkkitehtuuri, jota käytetään yleisesti myös valvomattomaan oppimiseen
2. voidaan käyttää dimensioiden pienentämismenetelmänä epälineaarisessa
3. voidaan käyttää datan representaation oppimiseen, edustavien ominaisuuksien muuntamiseen
Tässä vaiheessa pitäisi olla helppo ymmärtää, millainen Autoencoder on, arkkitehtuuri on hyvin yksinkertainen, joten katsotaanpa sen muunnoksia!
Autokooderin tyypit
Autokooderin perusperiaatteiden selittämisen jälkeen on aika tarkastella autokooderin laajennettua ja edistynyttä käyttöä, jotta näet autokooderin laajan käytön!
2-1. Unet:
Unet-arkkitehtuuria voidaan käyttää yhtenä kuvan segmentointikeinona, ja Unet-arkkitehtuuria voidaan pitää muunnelmana Autoencoderista.

2-2. Rekursiiviset autokooderit:
Kyseessä on verkko, joka yhdistää uuden syötetekstin latenttiin tilaan muista syötteistä, tämän verkon tarkoituksena on sentimenttien luokittelu.Tämä voidaan nähdä myös muunnelmana automaattisesta koodauksesta, joka poimii harvan tekstin sitä mukaa, kun sitä kirjoitetaan, ja löytää tärkeän latentin tilan.

2-Seq2Seq:
Sequence to Sequence on generatiivinen malli, joka on ollut hyvin suosittu jo jonkin aikaa. Se on loistava ratkaisu siihen dilemmaan, että RNN-tyypit eivät pysty käsittelemään epämääräisiä pareja, ja se on toiminut hyvin esimerkiksi chatbottien ja tekstien generoinnissa.Tämä voidaan nähdä myös eräänlaisena autokooderiarkkitehtuurina.

Autokooderin sovellukset
Kun olemme tutustuneet Autoencoderin moniin ja erilaisiin variaatioihin, katsotaanpa, missä muualla Autoencoderia voidaan käyttää!
3-1. Mallin esivalmennettu paino
Painon esivalmennukseen voidaan käyttää myös automaattikooderia, jolloin malli löytää paremman lähtöarvon.Esimerkiksi kun haluamme täydentää kohdemallia, kuten tavoite. piilotettu kerros on:, joten alussa käytämme automaattisen kooderin käsitettä 784 ulottuvuuden syöttämiseen, ja latentti tila keskellä on 1000 ulottuvuutta, jotta voimme tehdä esivalmennuksen ensin, joten nämä 1000 ulottuvuutta voivat hyvin säilyttää syötteen.Sitten poistamme alkuperäisen ulostulon ja lisäämme toisen kerroksen, ja niin edelleen.Näin koko malli saa paremman lähtöarvon.
Huh! Jos käytät 1000 neuronia edustamaan 784 tuloulottuvuutta, eikö se tarkoita, että verkko on kopioitava uudestaan? Mitä hyötyä koulutuksesta on? Kyllä, siksi tällaisessa esivalmennuksessa lisätään yleensä L1-normin tasoittaja, jotta piilokerrosta ei kopioida uudestaan.

Lähde: Li Hongyi
Li Hongyin mukaan -Aikaisemmin oli yleisempää käyttää tällaista menetelmää esivalmennuksessa, mutta nykyään, kun valmennustaidot ovat lisääntyneet, tätä menetelmää ei enää tarvita.Mutta jos sinulla on hyvin vähän etiketöityä dataa mutta paljon etiketöimätöntä dataa, voit käyttää tätä menetelmää painon esivalmennukseen, koska Autoencoder itsessään on valvomaton oppimismenetelmä, käytämme ensin etiketöimätöntä dataa painon esivalmennukseen ja sitten etiketöimätöntä dataa painon esivalmennukseen.Käytämme merkitsemätöntä dataa ensin painojen esiharjoitteluun ja sitten merkityn datan avulla painojen hienosäätöön, jotta saamme hyvän mallin.Jos haluat lisätietoja, katso herra Li:n video, se on hyvin selitetty!
3-2. Kuvan segmentointi
Äsken näkemäämme Unet-mallia tarkastellaan vielä kerran, koska se on periaatteessa yleisin vikojen havaitsemisongelma Taiwanin valmistusteollisuudessa.
Ensin meidän täytyy merkitä syöttötieto, josta tulee tuotoksemme. Meidän täytyy rakentaa verkko, syöttää alkuperäinen kuva (vasen, hampaan röntgenkuvat) ja tuottaa tuotos (oikea, hampaan rakenteen luokittelu).Tässä tapauksessa kooderi & dekooderi on konvoluutiokerros, jossa on vahva graafinen arviointi, mielekkäiden piirteiden poimiminen ja dekonvoluutio takaisin dekooderissa segmentointituloksen saamiseksi.

3-3. Video tekstiksi
Tämänkaltaisessa kuvatekstiongelmassa käytämme sekvenssistä sekvenssiin -mallia, jossa lähtötietona on joukko valokuvia ja tuloksena valokuvia kuvaava teksti.Sekvenssistä sekvenssiin -mallissa käytetään kooderina LSTM + Conv-verkkoa & dekooderina, joka voi kuvata peräkkäisten toimintojen sekvenssiä & CNN-ytimen avulla poimimaan kuvassa tarvittavan latentin tilan.mutta tämä tehtävä on hyvin vaikea, joten annan sinun kokeilla sitä, jos olet kiinnostunut!

3-4. Kuvanhaku
Kuvanhaku Asia on niin, että syötetään kuva ja yritetään löytää lähin vastaavuus, mutta jos verrataan pikseleittäin, niin on todella helppoJos käytät Autoencoderia pakkaamaan kuvan ensin latenttiavaruuteen ja lasket sitten samankaltaisuuden kuvan latenttiavaruudesta, tulos on paljon parempi.Tulos on paljon parempi, koska jokainen latenttiavaruuden ulottuvuus voi edustaa tiettyä ominaisuutta.Jos etäisyys lasketaan latentista avaruudesta, on järkevää löytää samankaltaisia kuvia.Erityisesti tämä olisi loistava tapa valvomattomaan oppimiseen ilman datan merkitsemistä!

Tässä ovat.Kuuluisan Deep Learning -jumalan Georey E. Hintonin paperissa vasemmassa yläkulmassa näkyy graafi, jota haluat etsiä, kun taas muut ovat kaikki graafit, joita autokooderi pitää hyvin samankaltaisina.7133>

Content-BasedImage Retrieval
3-5. Anomalian havaitseminen
Ei löydy hyvää kuvaa, joten jouduin käyttämään tätä LOL
Anomalioiden havaitseminen on myös super yleinen valmistusongelma, joten tätä ongelmaa voi kokeilla myös AutoencoderillaVoimme kokeilla sitä Autoencoderilla!Puhutaan ensin poikkeamien todellisesta esiintymisestä. Poikkeamia esiintyy yleensä hyvin harvoin, esimerkiksi epänormaaleja signaaleja koneessa, äkillisiä lämpötilapiikkejä …… jne.Tämä tapahtuu kerran kuukaudessa (jos useammin, kone pitäisi pakottaa eläkkeelle). Jos tietoja kerätään 10 sekunnin välein, joka kuukausi kerätään 260 000 dataa, mutta vain yksi ajanjakso on poikkeava, mikä on itse asiassa hyvin epätasapainoinen määrä tietoja.
Paras tapa käsitellä tätä tilannetta on siis hakea alkuperäistä dataa, joka on loppujen lopuksi suurin datamäärä, joka meillä on!Jos voimme ottaa hyvän datan ja kouluttaa hyvän autokooderin, niin jos siihen tulee poikkeamia, rekonstruoitu grafiikka luonnollisesti rikkoutuu.Näin saimme alkusysäyksen ajatukselle käyttää autokooderia poikkeamien löytämiseen!

Toteutus
Tässä käytämme Mnistiä leluesimerkkinä ja toteutamme autokooderin käyttäen Tensorflow.keras korkean tason API:ta! Koska uusi paketti tf.kerasille julkaistiin lähiaikoina, harjoittelemme Model-alaluokittelumenetelmän käyttöä tiedostossa
4-1. Luo malli – Vallina_AE:
Ensin tuota tensorflow!7133>

Tf.kerasin käyttö on näin yksinkertaista, kirjoita vain tf.keras!(En tiedä mistä puhun lol)
Load data & model preprocess
Ensin otamme Mnist-datan tf.keras.datasetista ja teemme pienen esikäsittelyn
Nomalize: pakkaa arvot 0:n ja 1:n välille, harjoittelu on helpompaa
Binarization: korosta selvemmät alueet, harjoittelu antaa parempia tuloksia.
Luo malli – Vallina_AE:
Tämä on Tensorflow-dokumentin tarjoama menetelmä mallien luomiseen.monimutkaisempi.
Mitä olen tähän mennessä oppinut, on luoda kerros __init __-paikassa ja määritellä eteenpäin kulku kutsussa.
Käytämme siis kahta peräkkäistä mallia luodaksemme kooderin & dekooderin. kaksi on symmetrinen rakenne, kooderi on kytketty sisääntulokerrokseen, joka on vastuussa syöttötietojen kuljettamisesta, ja sitten kolmeen tiheään kerrokseen. dekooderi on sama.
Jälleen kutsun alla on ketjutettava kooderi & dekooderi, määrittelemällä ensin latentti tila self.encoder
:n ulostuloksi.tila self.encoder
:n ulostulona ja sitten rekonstruktio dekooderin läpäisyn tuloksena.Tämän jälkeen yhdistämme tf.keras.Model()
:n avulla kaksi mallia, jotka määrittelimme __init__
:ssä.AE_model = tf.keras.Model(inputs = self.encoder.input, outputs = reconstruction)
määrittää input kooderin inputiksi ja output dekooderin outputiksi, ja siinä kaikki!Sitten palautamme AE_modelin ja olet valmis!
Mallin kääntäminen & training
Ennen kuin Keras voi kouluttaa mallin, se on käännettävä ennen kuin se voidaan pudottaa koulutukseen.Kokoonpanossa määrittelet optimoijan, jota haluat käyttää ja tappion, jonka haluat laskea.
Harjoittelussa käytä VallinaAE.fit
datan syöttämiseen, mutta muista, että palautamme itseämme, joten X ja Y on heitettävä samaan dataan.
Katsotaanpa 100 epookin harjoittelun tuloksia, näyttää siltä, että rekonstruointitulokset eivät ole niin hyviä kuin luulimme.

4-2. Luo malli.- Conv_AE:
Kuten nimestä käy ilmi, voimme käyttää konvoluutiokerrosta piilokerroksena oppiaksemme ominaisuuksia, jotka voidaan rekonstruoida takaisin.
Mallin muuttamisen jälkeen voit tarkastella tuloksia ja nähdä, onko parannusta tapahtunut.

Näyttää siltä, että rekonstruktiolla saadaan paljon parempia tuloksia, kun harjoittelua on suoritettu noin 10 epokkaa.
4-3. Luo malli – denoise_AE:
Autokooderia voidaan käyttää myös kohinanpoistoon, joten tässä tapauksessa me
Aluksi voimme lisätä alkuperäiseen kuvaan kohinaa. Kohinan lisäämisen logiikka on tehdä yksinkertainen siirto alkuperäiselle pikselille ja lisätä sitten satunnaislukuja.Kuvan esikäsittelyn voi tehdä yksinkertaisesti muuttamalla leikkeen arvoksi 0, jos se on pienempi kuin 0, ja arvoksi 1, jos se on suurempi kuin 1. Kuten alla näkyy, leikkeen kuvankäsittelyn jälkeen voimme tehdä kuvasta terävämmän ja näkyvistä alueista näkyvämpiä.Tämä antaa meille paremman tuloksen, kun käytämme Autoencoderia.

ja itse mallin ja Conv_AE välillä ei ole eroa.Itse mallin ja Conv_AE:n välillä ei ole eroa, paitsi että sovituksen aikana se on muutettava muotoon
denoise_AE.fit(train_images_noise, train_images, epochs=100, batch_size=128, shuffle=True)
, jotta alkuperäinen noise_data palautuu alkuperäiseen input-dataan


Kuten näet, Mnistissä yksinkertaisella autokooderilla saavutetaan hyvin nopea denoising-vaikutus.
Hyviä esimerkkejä
Tämä on hyvä resurssi niille, jotka ovat kiinnostuneita oppimaan lisää
- Autoencodereiden rakentaminen Kerasissa autoencoder-sarja on selkeästi kirjoitettu.
- Tensorflow 2.0 virallinen dokumentaatio opetusohjelma, jotain hyvin täydellinen, vain kirjoittaa hieman vaikea, viettää melko paljon aikaa nähdä (ainakin minä vetää XD)
3. Li Hongyi opettaja syväoppimisen on myös erittäin suositeltavaa, puhua hyvin selkeä ja helppo ymmärtää, ei-
Johtopäätökset
Tämän artikkelin avulla voit nopeasti selvittää autokooderin peruskäsitteen, eräitä autokooderin muunnelmia ja sovelluksia.skenaarioita.4310>
Seuraavissa artikkeleissa aloitetaan generatiivisista malleista, jotka ulottuvat autokooderin, VAE:n ja GAN:n käsitteistä, ja matkan varrella tehdään myös muita laajennuksia ja muunnoksia.
Jos pidit artikkelista, klikkaa vielä muutama taputus (ei vain kerran) kannustukseksi!
Lue tämän artikkelin koodi kokonaisuudessaan:https://github.com/EvanstsaiTW/Generative_models/blob/master/AE_01_keras.ipynb
Vastaa