Co jsou to autoenkodéry?
On 11 listopadu, 2021 by adminJednoduchý úvod do autoenkodéru a jeho různých aplikací. Také tyto tutoriály používají tf.keras,TensorFlow, vysokoúrovňové API jazyka Python pro vytváření a trénování modelů hlubokého učení.
常常見到 Autoencoder 的變形以及應用,打算花幾篇的時間好好的研究一下,順便練習 Tensorflow.keras 的 API 使用。
- Co je to autoenkodér
- Typy autoenkodéru
- Použití autoenkodéru
- Implementace
- Skvělé příklady
- Závěr
Obtížnost: ★ ★ ☆ ☆ ☆
後記: 由於 Tensorflow 2.0 alpha 已於 3/8號釋出,但此篇是在1月底完成的,故大家可以直接使用安裝使用看看,但需要更新至相對應的 CUDA10。
Co je Autoencoder
首先,什麼是 Autoencoder 呢? 不囉唆,先看圖吧!
.Původní koncepce autoenkodéru je velmi jednoduchá, spočívá v zadání vstupních dat a získání přesně stejných dat jako vstupní data prostřednictvím neuronové sítě.Kodér nejprve přijme vstupní data, zkomprimuje je do menšího rozměrového vektoru Z a poté je vloží do dekodéru, aby obnovil jejich původní velikost.Zní to jednoduše, ale pojďme se na to podívat blíže a zjistit, zda je to tak snadné.
.Kodér:
Kodér je zodpovědný za komprimaci původních vstupních dat do nízkorozměrného vektoru C. Tento C, kterému obvykle říkáme kód, latentní vektor nebo vektor příznaků, ale já jsem zvyklý mu říkat latentní prostor, protože C představuje skrytý příznak.Kodér dokáže komprimovat původní data do smysluplného nízkorozměrného vektoru, což znamená, že Autoenkodér má redukci dimenzionality a skrytá vrstva má aktivační funkci nelineární transformace, takže tento Kodér je jako výkonná verze PCA, protože Kodér dokáže provádět nelineární transformaci.redukce dimenze!
Dekodér:
Dekodér co nejvíce obnovuje latentní prostor zpět do vstupních dat, což je transformace příznakových vektorů z prostoru nižší dimenze do prostoru vyšší dimenze.
Takže jak měříte, jak dobře funguje Autoencoder ! Jednoduše porovnáním podobnosti dvou původních vstupních dat s rekonstruovanými daty.Naši ztrátovou funkci lze tedy zapsat jako …..
Ztrátová funkce:
2-2. Rekurzivní autoenkodéry:
Jedná se o síť, která kombinuje nový vstupní text s latentním prostorem z jiných vstupů, účelem této sítě je klasifikace sentimentu.To lze také považovat za variantu autoenkodéru, který extrahuje řídký text v průběhu psaní a vyhledává latentní prostor, který je důležitý.
2-Seq2Seq:
Sequence to Sequence je generativní model, který je již delší dobu velmi populární. Je skvělým řešením dilematu typů RNN, které si neumí poradit s neurčitými dvojicemi, a dobře se osvědčil v tématech, jako je generování chatbotů a textů.To lze také považovat za druh architektury autoenkodéru.
Aplikace autokodéru
Po seznámení s mnoha různými variantami Autoencoderu se podívejme, kde všude lze Autoencoder ještě použít!
3-1. Předtrénovaná váha modelu
Pro předtrénování váhy lze použít také autoenkodér, což znamená, že model najde lepší výchozí hodnotu.Například když chceme dokončit cílový model, jako je cíl. skrytá vrstva je:, takže na začátku použijeme koncept autoenkodéru pro vstup 784 dimenzí a latentní prostor uprostřed je 1000 dimenzí, aby se nejprve provedl předtrénink, takže těchto 1000 dimenzí může dobře zachovat vstupníPoté odstraníme původní výstup a přidáme druhou vrstvu a tak dále.Celý model tak získá lepší výchozí hodnotu.
Huh! Pokud použijete 1000 neuronů k reprezentaci 784 vstupních rozměrů, neznamená to, že je třeba síť zkopírovat celou znovu? Jaký je smysl školení? Ano, proto v takovémto předtréninku obvykle přidáváme regulátor normy L1, aby se skrytá vrstva nekopírovala znovu a znovu.
Podle pana Li Hongyi.V minulosti bylo běžnější používat tuto metodu pro předtrénink, ale nyní, vzhledem k nárůstu tréninkových dovedností, již není potřeba tuto metodu používat.Pokud však máte velmi málo dat se štítky, ale spoustu neoznačených dat, můžete tuto metodu použít k předtrénování vah, protože samotný Autoencoder je metoda učení bez dohledu, nejprve použijeme neoznačená data k získání předtrénování vah a poté použijeme neoznačená data k získání předtrénování vah.Neoznačená data použijeme nejprve k předběžnému tréninku vah a poté pomocí označených dat doladíme váhy tak, abychom získali dobrý model.Další podrobnosti naleznete ve videu pana Li, je to velmi dobře vysvětleno!
3-2. Segmentace obrazu
Model Unet, který jsme právě viděli, si ještě jednou prohlédneme, protože se v podstatě jedná o nejčastější problém detekce vad v tchajwanském výrobním průmyslu.
Nejprve musíme označit vstupní data, která budou naším výstupem. To, co musíme udělat, je zkonstruovat síť, na vstupu původní obrázek (vlevo, rentgenové snímky zubů) a vygenerovat výstup (vpravo, klasifikace struktury zubů).V tomto případě bude dekodér kodéru & konvoluční vrstvou se silným grafickým úsudkem, extrakcí smysluplných rysů a zpětnou dekonvolucí v dekodéru pro získání výsledku segmentace.
3-3. Převod videa na text
Pro problém s popisky obrázků, jako je tento, použijeme model převodu sekvence na sekvenci, kde vstupními daty je svazek fotografií a výstupem je text popisující fotografie.Model sekvence na sekvenci používá LSTM + síť Conv jako kodér & dekodér, který dokáže popsat sekvenci sekvenčních akcí & pomocí jádra CNN k extrakci potřebného latentního prostoru v obraze.ale tento úkol je velmi obtížný, takže vás nechám vyzkoušet, pokud máte zájem!
3-4. Vyhledávání obrázků
Vyhledávání obrázků Jde o to, že zadáte obrázek a snažíte se najít nejbližší shodu, ale pokud porovnáváte po pixelech, pak je to opravdu snadné.Pokud použijete automatický kodér, který nejprve zkomprimuje obraz do latentního prostoru a poté vypočítá podobnost v latentním prostoru obrazu, bude výsledek mnohem lepší.Výsledek je mnohem lepší, protože každá dimenze v latentním prostoru může představovat určitý rys.Pokud se vzdálenost počítá na latentním prostoru, je rozumné najít podobné obrázky.Zejména by to byl skvělý způsob učení bez dohledu, bez označování dat!
Zde jsou.V článku Georeyho E. Hintona, slavného boha hlubokého učení, je v levém horním rohu zobrazen graf, který chcete vyhledat, zatímco ostatní jsou grafy, které autoenkodér považuje za velmi podobné.7133>
obsahově založenéVyhledávání obrázků
3-5. Detekce anomálií
Nemůžu najít dobrý obrázek, tak jsem musel použít tenhle LOL
Vyhledávání anomálií je také super běžný výrobní problém, takže tento problém lze také vyzkoušet pomocí Autoencoderu.Můžeme to zkusit s Autoencoderem!Nejprve si povězme o skutečném výskytu anomálií. Anomálie se obvykle vyskytují velmi zřídka, například abnormální signály ve stroji, náhlé teplotní skoky …… apod.To se děje jednou za měsíc (pokud je to častěji, měl by být stroj donucen odejít do důchodu). Pokud se data sbírají každých 10 sekund, pak se každý měsíc nashromáždí 260 000 kusů dat, ale pouze jeden časový úsek je anomálie, což je vlastně velmi nevyvážené množství dat.
Nejlepší způsob, jak se s touto situací vypořádat, je tedy sáhnout po původních datech, kterých máme přece jenom nejvíc!Pokud můžeme vzít dobrá data a natrénovat dobrý autoenkodér, pak pokud se objeví anomálie, pak se přirozeně rekonstruovaná grafika rozbije.Takto jsme začali s nápadem používat autoenkodér k vyhledávání anomálií!
.Implementace
Zde použijeme Mnist jako příklad na hraní a implementujeme autoenkodér pomocí vysokoúrovňového API Tensorflow.keras! Protože byl brzy vydán nový balíček pro tf.keras, procvičíme si použití metody podtřídy Model v souboru
4-1. Vytvoření modelu – Vallina_AE:
Nejprve importujte tensorflow!7133>
Použití tf.keras je jednoduché, stačí zadat tf.keras!(Nevím, o čem mluvím lol)
Načíst data & předzpracování modelu
Nejprve vezmeme data Mnist z tf.keras.dataset a provedeme malé předzpracování
.Nomizace: stlačí hodnoty na hodnotu mezi 0 a 1, trénink bude snáze konvergovat
Binarizace: zvýrazní zřetelnější oblasti, trénink poskytne lepší výsledky.
Vytvoření modelu – Vallina_AE:
Toto je metoda, kterou poskytuje dokument Tensorflow pro vytváření modelů.složitější.
Co jsem se zatím naučil, je vytvořit vrstvu na místě __init __ a ve volání definovat předávání.
Pro vytvoření kodéru & dekodéru tedy použijeme dva sekvenční modely. dva mají symetrickou strukturu, kodér je připojen ke vstupní vrstvě, která je zodpovědná za přenos vstupních dat, a dále ke třem hustým vrstvám. dekodér je stejný.
Opět v rámci volání musíme spojit kodér & dekodér, přičemž nejprve definujeme latentní prostor jako výstup self.encoder
.prostor jako výstup self.encoder
a pak rekonstrukce jako výsledek průchodu dekodérem.Pomocí tf.keras.Model()
pak propojíme dva modely, které jsme definovali v __init__
.AE_model = tf.keras.Model(inputs = self.encoder.input, outputs = reconstruction)
určuje vstup jako vstup kodéru a výstup jako výstup dekodéru, a to je vše!Pak vrátíme AE_model a je hotovo!
Kompilování modelu & training
Předtím, než může Keras trénovat model, je třeba jej zkompilovat a teprve poté jej pustit do trénování.V kompilaci zadáte optimalizátor, který chcete použít, a ztrátu, kterou chcete vypočítat.
Pro trénování použijte VallinaAE.fit
pro vložení dat, ale nezapomeňte, že se obnovujeme, takže X a Y musí být vhozeny ve stejných datech.
Podívejme se na výsledky trénování 100 epoch, zdá se, že výsledky rekonstrukce nejsou tak dobré, jak jsme si mysleli.
4-2. Vytvořte model.- Conv_AE:
Jak název napovídá, můžeme vrstvu Convolution použít jako skrytou vrstvu k učení funkcí, které lze zpětně rekonstruovat.
Po změně modelu se můžete podívat na výsledky a zjistit, zda došlo ke zlepšení.
Zdá se, že výsledky Rekonstrukce jsou mnohem lepší, s přibližně 10 epochami trénování.
4-3. Vytvoření modelu – denoise_AE:
Autoenkodér lze také použít k odstranění šumu, takže zde se budeme
Nejprve můžeme do původního obrázku přidat šum. Logika přidávání šumu spočívá v tom, že na původním pixelu provedeme jednoduchý posun a poté přidáme náhodná čísla.Část předzpracování obrazu lze provést jednoduše tak, že klip bude mít hodnotu 0, pokud je menší než 0, a 1, pokud je větší než 1. Jak je uvedeno níže, po zpracování obrazu klipu můžeme obraz udělat ostřejší a zřetelné oblasti viditelnější.Díky tomu získáme lepší výsledek, když použijeme funkci Autoencoder.
a samotným modelem a Conv_AE není žádný rozdíl.Mezi samotným modelem a Conv_AE není žádný rozdíl, kromě toho, že se během fitování musí změnit na
denoise_AE.fit(train_images_noise, train_images, epochs=100, batch_size=128, shuffle=True)
, aby se obnovila původní vstupní data noise_data
.
Jak je vidět, na Mnist dosahuje jednoduchý autoenkodér velmi rychlého denoisingového efektu.
Skvělé příklady
Je to dobrý zdroj informací pro ty, kteří se o něm chtějí dozvědět více
- Tvorba autoenkodérů v Keras autoencoder series je přehledně napsaná.
- Tensorflow 2.0 oficiální dokumentace tutoriál, něco velmi kompletní, jen psát trochu obtížné, strávit poměrně hodně času vidět (alespoň jsem vytáhl XD)
3. Li Hongyi učitel hlubokého učení je také velmi doporučeno, mluvit velmi jasné a snadno pochopitelné, non-
Závěr
Pomocí tohoto článku se rychle seznámíte se základním pojmem autoenkodér, některými variantami autoenkodéru a jeho použitím.scénáře.4310>
V několika následujících článcích začneme generativními modely, které se rozšíří od konceptu autoenkodéru, VAE až po GAN a další rozšíření a morfy na této cestě.
Pokud se vám článek líbí, klikněte prosím ještě několikrát (ne jen jednou) na povzbuzení!
Přečtěte si celý kód tohoto článku:https://github.com/EvanstsaiTW/Generative_models/blob/master/AE_01_keras.ipynb
Napsat komentář