Co to są Autoenkodery?
On 11 listopada, 2021 by adminŁagodne wprowadzenie do Autoenkodera i jego różnych zastosowań. Ponadto, te tutoriale używają tf.keras,wysokopoziomowe API TensorFlow w Pythonie do budowania i trenowania modeli głębokiego uczenia.
常常見到 Autoencoder 的變形以及應用,打算花幾篇的時間好好的研究一下,順便練習 Tensorflow.keras 的 API 使用。
- Co to jest Autoencoder
- Typy Autoencodera
- Zastosowanie Autoencodera
- Implementacja
- Wspaniałe przykłady
- Wnioski
Trudność: ★ ★ ☆ ☆
後記: 由於 Tensorflow 2.0 alpha 已於 3/8號釋出,但此篇是在1月底完成的,故大家可以直接使用安裝使用看看,但需要更新至相對應的 CUDA10。
Co to jest Autoencoder?
首先,什麼是 Autoencoder 呢? 不囉唆,先看圖吧!
.Oryginalna koncepcja Autoencodera jest bardzo prosta, polega na wrzuceniu danych wejściowych i otrzymaniu dokładnie takich samych danych jak dane wejściowe poprzez sieć neuronową.Koder najpierw przyjmuje dane wejściowe, kompresuje je do wektora o mniejszym wymiarze Z, a następnie wprowadza Z do dekodera, aby przywrócić Z do jego oryginalnego rozmiaru.Brzmi to łatwo, ale przyjrzyjmy się temu bliżej i sprawdźmy, czy jest to takie proste.
.Koder:
Enkoder jest odpowiedzialny za kompresję oryginalnych danych wejściowych do niskowymiarowego wektora C. Ten C, który zwykle nazywamy kodem, wektorem ukrytym lub wektorem cech, ale ja jestem przyzwyczajony do nazywania go przestrzenią ukrytą, ponieważ C reprezentuje ukrytą cechę.Encoder może skompresować oryginalne dane do znaczącego wektora niskowymiarowego, co oznacza, że Autoencoder ma redukcję wymiarowości, a warstwa ukryta ma nieliniową transformację aktywacji fukcji, więc ten Encoder jest jak potężna wersja PCA, ponieważ Encoder może zrobić nielinioweredukcja wymiarów!
Dekoder:
To co robi Dekoder to przywrócenie przestrzeni ukrytej z powrotem do danych wejściowych tak bardzo jak to możliwe, co jest transformacją wektorów cech z przestrzeni o niższym wymiarze do przestrzeni o wyższym wymiarze.
Więc jak mierzysz jak dobrze działa Autoencoder ! Po prostu poprzez porównanie podobieństwa dwóch oryginalnych danych wejściowych z danymi zrekonstruowanymi.Zatem nasza funkcja straty może być zapisana jako ….
Funkcja straty:
2-2. autokodery rekursywne:
Jest to sieć, która łączy nowy tekst wejściowy z przestrzenią ukrytą z innych wejść, celem tej sieci jest klasyfikacja sentymentu.Może to być również postrzegane jako wariant Autoencoder, który wyodrębnia nieliczbowy tekst w trakcie jego wpisywania i znajduje przestrzeń ukrytą, która jest istotna.
2-Seq2Seq:
Sequence to Sequence jest modelem generatywnym, który od jakiegoś czasu cieszy się dużą popularnością. Jest to wspaniałe rozwiązanie dylematu typów RNN, które nie są w stanie poradzić sobie z nieokreślonymi parami, i dobrze sprawdził się w tematach takich jak chatbot i generowanie tekstu.Może to być również postrzegane jako rodzaj architektury Autoencodera.
Aplikacje Autoencodera
Po przyjrzeniu się wielu i różnorodnym odmianom Autoencodera, zobaczmy gdzie jeszcze Autoencoder może być użyty!
3-1. Model pretrained weight
Autoencoder może być również użyty do pretrain of weight, co oznacza, że model znajduje lepszą wartość początkową.Na przykład, gdy chcemy zakończyć model docelowy, taki jak cel. ukryta warstwa jest:, więc na początku używamy koncepcji autoenkodera do wprowadzenia 784 wymiarów, a przestrzeń ukryta w środku jest 1000 wymiarów, aby zrobić wstępne szkolenie pierwszy, więc te 1000 wymiarów może dobrze zachować dane wejściowe.Następnie usuwamy oryginalne wyjście i dodajemy drugą warstwę, i tak dalej.W ten sposób cały model uzyska lepszą wartość początkową.
Huh! Jest pewna dziwna część… jeśli używasz 1000 neuronów do reprezentowania 784 wymiarów wejściowych, czy nie oznacza to, że sieć musi być po prostu skopiowana od nowa? Jaki jest sens szkolenia? Tak, dlatego w takim treningu wstępnym zazwyczaj dodajemy regularyzator normy L1, aby warstwa ukryta nie była kopiowana od nowa.
Według Pana Li Hongyi.W przeszłości częściej stosowano taką metodę do szkolenia wstępnego, ale obecnie, ze względu na wzrost umiejętności szkoleniowych, nie ma już potrzeby stosowania tej metody.Ale jeśli masz bardzo mało danych z etykietami, ale dużo nieoznakowanych danych, możesz użyć tej metody do wstępnego treningu wag, ponieważ Autoencoder sam w sobie jest metodą uczenia bez nadzoru, używamy nieoznakowanych danych, aby uzyskać wstępny trening wag, a następnie używamy nieoznakowanych danych, aby uzyskać wstępny trening wag.Używamy nieoznakowanych danych, aby uzyskać wstępne wytrenowanie wag, a następnie używamy oznakowanych danych, aby dostroić wagi, tak aby uzyskać dobry model.Aby uzyskać więcej szczegółów, zobacz wideo pana Li, jest to bardzo dobrze wyjaśnione!
3-2. segmentacja obrazu
Model Unet, który właśnie widzieliśmy, spójrzmy na to jeszcze raz, ponieważ jest to w zasadzie najczęstszy problem wykrywania wad w tajwańskim przemyśle wytwórczym.
Najpierw musimy oznaczyć dane wejściowe, które będą naszym wyjściem. To co musimy zrobić, to skonstruować sieć, wprowadzić oryginalny obraz (po lewej, zdjęcia rentgenowskie zębów) i wygenerować wyjście (po prawej, klasyfikacja struktury zęba).W tym przypadku, koder & dekodera będzie warstwą konwolucji z silną oceną graficzną, wydobywając znaczące cechy i dekonwolucję z powrotem w dekoderze, aby uzyskać wynik segmentacji.
3-3. wideo na tekst
Dla problemu z podpisem do obrazu, takiego jak ten, używamy modelu sekwencji na sekwencję, gdzie dane wejściowe są zbiorem zdjęć, a dane wyjściowe są tekstem opisującym te zdjęcia.Model sekwencji do sekwencji używa LSTM + Conv net jako kodera & dekodera, który może opisać sekwencję sekwencyjnych działań & używając jądra CNN do ekstrakcji przestrzeni ukrytej wymaganej w obrazie.ale to zadanie jest bardzo trudne do wykonania, więc pozwolę ci spróbować, jeśli jesteś zainteresowany!
3-4. Image Retrieval
Image Retrieval Rzeczą do zrobienia jest wprowadzenie obrazu i próba znalezienia najbliższego dopasowania, ale jeśli porównasz pikselowo, to naprawdę łatwo jestJeśli użyjesz Autoencoder, aby najpierw skompresować obraz do przestrzeni ukrytej, a następnie obliczyć podobieństwo na przestrzeni ukrytej obrazu, wynik będzie znacznie lepszy.Wynik jest znacznie lepszy, ponieważ każdy wymiar w przestrzeni ukrytej może reprezentować pewną cechę.Jeśli odległość jest obliczana na przestrzeni ukrytej, rozsądnie jest znaleźć podobne obrazy.W szczególności, byłby to świetny sposób na uczenie bez nadzoru, bez etykietowania danych!
Oto one.Praca Georey E. Hinton, słynnego boga Deep Learning, pokazuje wykres, który chcemy wyszukać w lewym górnym rogu, podczas gdy pozostałe są wykresami, które autoenkoder uważa za bardzo podobne.7133>
Content-BasedImage Retrieval
3-5. wykrywanie anomalii
Nie mogę znaleźć dobrego obrazu, więc musiałem użyć tego LOL
Znalezienie anomalii jest również super powszechnym problemem produkcyjnym, więc ten problem może być również próbowany z AutoencoderemMożemy spróbować tego z Autoencoderem!Po pierwsze, porozmawiajmy o faktycznym występowaniu anomalii. Anomalie zazwyczaj występują bardzo rzadko, na przykład, nietypowe sygnały z maszyny, nagłe skoki temperatury ……, itp.Jeśli dane zbierane są co 10 sekund, to miesięcznie zbieranych jest 260 000 danych, ale tylko jeden okres czasu jest anomalią, co w rzeczywistości jest bardzo niezrównoważoną ilością danych.
Tak więc najlepszym sposobem na poradzenie sobie z tą sytuacją jest sięgnięcie po oryginalne dane, które są przecież największą ilością danych, jaką mamy!Jeśli możemy wziąć dobre dane i wytrenować dobry autoenkoder, to jeśli pojawią się anomalie, to naturalnie zrekonstruowana grafika się zepsuje.W ten sposób narodził się pomysł wykorzystania autoencodera do wyszukiwania anomalii!
.Implementacja
Tutaj używamy Mnist jako zabawkowego przykładu i implementujemy Autoencoder używając wysokopoziomowego API Tensorflow.keras! Ponieważ nowy pakiet dla tf.keras został wkrótce wydany, ćwiczymy używanie metody podklasowania Model w pliku
4-1. Utwórz model – Vallina_AE:
Na początek zaimportuj tensorflow!7133>
Użycie tf.keras jest tak proste, że wystarczy wpisać tf.keras!(nie wiem o czym mówię lol)
Load data &model preprocess
Najpierw weźmiemy dane Mnist z tf.keras.dataset i zrobimy mały preprocess
.Nomalizacja: skompresuj wartości do przedziału od 0 do 1, trening będzie łatwiejszy do zbieżności
Binaryzacja: uwydatnij bardziej oczywiste obszary, trening da lepsze rezultaty.
Create a Model – Vallina_AE:
Jest to metoda przewidziana przez dokument Tensorflow do tworzenia modeli.bardziej złożone.
To, czego nauczyłem się do tej pory, to utworzenie warstwy w miejscu __init __ i zdefiniowanie przejścia do przodu w wywołaniu.
Tak więc używamy dwóch modeli sekwencyjnych do stworzenia kodera & dekodera. dwa są strukturą symetryczną, koder jest podłączony do warstwy wejściowej, która jest odpowiedzialna za przenoszenie danych wejściowych, a następnie do trzech gęstych warstw. dekoder jest taki sam.
Ponownie, pod wywołaniem, musimy konkatenować koder & dekodera, najpierw definiując przestrzeń latentną jako wyjście self.encoder
.przestrzeń jako wyjście z self.encoder
, a następnie rekonstrukcja jako wynik przejścia dekodera.Następnie używamy tf.keras.Model()
do połączenia dwóch modeli, które zdefiniowaliśmy w __init__
.AE_model = tf.keras.Model(inputs = self.encoder.input, outputs = reconstruction)
określa input jako wejście kodera i output jako wyjście dekodera, i to wszystko!Następnie zwracamy AE_model i gotowe!
Kompilacja modelu & trening
Zanim Keras może wytrenować model, musi on zostać skompilowany, zanim będzie można go wrzucić do treningu.W kompilacji podajesz optymalizator, którego chcesz użyć i stratę, którą chcesz obliczyć.
Do treningu użyj VallinaAE.fit
, aby wprowadzić dane, ale pamiętaj, że przywracamy siebie, więc X i Y muszą być wrzucone w te same dane.
Przyjrzyjmy się wynikom treningu 100 epok, wygląda na to, że wyniki rekonstrukcji nie są tak dobre jak myśleliśmy.
4-2. Tworzenie modelu- Conv_AE:
Jak sama nazwa wskazuje, możemy użyć warstwy Convolution jako warstwy ukrytej do uczenia się cech, które mogą być odtworzone z powrotem.
Po zmianie modelu można przyjrzeć się wynikom, aby sprawdzić, czy nastąpiła poprawa.
Wydaje się, że wyniki Reconstruction są znacznie lepsze, przy około 10 epokach treningu.
4-3. Utwórz model – denoise_AE:
Ale także, autoenkoder może być użyty do usuwania szumu, więc tutaj
Po pierwsze, możemy dodać szum do oryginalnego obrazu. Logika dodawania szumu polega na wykonaniu prostego przesunięcia na oryginalnym pikselu, a następnie dodaniu losowych liczb.Część wstępnego przetwarzania obrazu może być wykonana po prostu przez uczynienie klipu 0, jeśli jest mniejszy niż 0 i 1, jeśli jest większy niż 1. Jak pokazano poniżej, po przetworzeniu obrazu klipu, możemy sprawić, że obraz będzie ostrzejszy, a oczywiste obszary staną się bardziej widoczne.Daje nam to lepszy efekt, gdy wrzucimy Autoencoder.
a samym modelem i Conv_AENie ma różnicy między samym modelem a Conv_AE, z wyjątkiem tego, że podczas dopasowania musi być zmieniony na
denoise_AE.fit(train_images_noise, train_images, epochs=100, batch_size=128, shuffle=True)
, aby przywrócić oryginalny noise_data do oryginalnych danych wejściowych
.
Jak widać, na Mnist prosty Autoencoder osiąga bardzo szybki efekt denoisingu.
Wspaniałe przykłady
Jest to dobry zasób dla tych, którzy są zainteresowani dowiedzeniem się więcej na ten temat
- Building Autoencoders in Keras autoencoder seria jest jasno napisana.
- Tensorflow 2.0 oficjalna dokumentacja samouczek, coś bardzo kompletne, po prostu napisać trochę trudne, spędzić sporo czasu, aby zobaczyć (przynajmniej ja ciągnąć XD)
3. Li Hongyi nauczyciel głębokiego uczenia się jest również bardzo zalecane, mówić bardzo jasne i łatwe do zrozumienia, nie
Zakończenie
Użyj tego artykułu aby szybko ustalić podstawowe pojęcie Autoencodera, niektóre odmiany Autoencodera i zastosowaniescenariusze.4310>
Kilka następnych artykułów rozpocznie się od modeli generatywnych, rozciągając się od koncepcji autoencodera, VAE, do GAN, i dalszych rozszerzeń i morfów po drodze.
Jeśli spodobał Ci się artykuł, proszę kliknij jeszcze kilka klapsów (nie tylko raz) na zachętę!
Zapoznaj się z pełnym kodem tego artykułu:https://github.com/EvanstsaiTW/Generative_models/blob/master/AE_01_keras.ipynb
.
Dodaj komentarz