Delikatne wprowadzenie do powtarzających się sieci neuronowych CNN LSTM
z przykładowym kodem w Pythonie.
Dane wejściowe o strukturze przestrzennej, takie jak obrazy, nie mogą być łatwo modelowane za pomocą standardowego Vanilla LSTM.
Sieć długookresowej pamięci CNN lub w skrócie CNN LSTM to architektura LSTM zaprojektowana specjalnie do problemów z przewidywaniem sekwencji z danymi wejściowymi przestrzennymi, takimi jak obrazy lub wideo.
W tym poście odkryjesz architekturę CNN LSTM do przewidywania sekwencji.
Po wypełnieniu tego posta będziesz wiedział:
- O rozwoju architektury modelu CNN LSTM do przewidywania sekwencji.
- Przykłady typów problemów, do których dostosowany jest model CNN LSTM.
- Jak zaimplementować architekturę CNN LSTM w Pythonie za pomocą Keras.
Rozpocznij swój projekt z moją nową książką Long-Short-Term Memory Networks With Python, w tym samouczki krok po kroku i Kod źródłowy Pythona pliki dla wszystkich przykładów.
Zacznijmy.

Konwolucyjne sieci neuronowe długookresowe sieci pamięci
Zdjęcie: Yair Aronshtam, niektóre prawa zastrzeżone.
Architektura CNN LSTM
Architektura CNN LSTM obejmuje wykorzystanie warstw Convolutional Neural Network (CNN) do wyodrębniania cech z danych wejściowych w połączeniu z LSTM w celu obsługi przewidywania sekwencji.
CNN LSTM zostały opracowane z myślą o problemach z przewidywaniem wizualnych szeregów czasowych oraz w zastosowaniu do generowania opisów tekstowych z sekwencji obrazów (np. Wideo). W szczególności problemy:
- Rozpoznawanie aktywności: Generowanie tekstowego opisu czynności przedstawionej w sekwencji obrazów.
- Opis obrazu: Generowanie tekstowego opisu pojedynczego obrazu.
- Opis wideo: Generowanie tekstowego opisu sekwencji obrazów.
[CNN LSTMs are] klasa modeli, która jest głęboka zarówno przestrzennie, jak i czasowo i ma elastyczność, którą można zastosować do różnych zadań wizyjnych obejmujących sekwencyjne wejścia i wyjścia
- Długoterminowe powtarzające się sieci splotowe do rozpoznawania i opisu wizualnego, 2015.
Architektura ta była pierwotnie nazywana długoterminową rekurencyjną siecią splotową lub modelem LRCN, chociaż będziemy używać bardziej ogólnej nazwy „CNN LSTM” w odniesieniu do LSTM, które używają CNN jako interfejsu w tej lekcji.
Ta architektura jest używana do generowania tekstowych opisów obrazów. Kluczem jest użycie CNN, która jest wstępnie przeszkolona w trudnym zadaniu klasyfikacji obrazu, która jest ponownie wykorzystywana jako ekstraktor cech dla problemu generowania napisów.
… Naturalne jest użycie CNN jako „kodera” obrazu, najpierw przygotowując go do zadania klasyfikacji obrazu i wykorzystując ostatnią ukrytą warstwę jako dane wejściowe do dekodera RNN, który generuje zdania
- Show and Tell: A Neural Image Caption Generator, 2015.
Ta architektura została również wykorzystana w przypadku problemów z rozpoznawaniem mowy i przetwarzaniem języka naturalnego, gdzie CNN są używane jako ekstraktory funkcji dla LSTM w przypadku danych wejściowych audio i tekstowych.
Ta architektura jest odpowiednia dla problemów, które:
- Mają strukturę przestrzenną na wejściu, taką jak struktura 2D lub piksele na obrazie lub struktura 1D słów w zdaniu, akapicie lub dokumencie.
- Mają strukturę czasową na wejściu, taką jak kolejność obrazów w filmie lub słowa w tekście, lub wymagają generowania danych wyjściowych ze strukturą czasową, taką jak słowa w opisie tekstowym.

Architektura sieci splotowych sieci neuronowych długookresowej pamięci
Potrzebujesz pomocy z LSTMs for Sequence Prediction?
Weź udział w moim bezpłatnym 7-dniowym kursie e-mail i odkryj 6 różnych architektur LSTM (z kodem).
Kliknij, aby się zarejestrować i otrzymać bezpłatną wersję kursu w formacie PDF Ebook.
Rozpocznij teraz BEZPŁATNY minikurs!
Wdrożenie CNN LSTM w Keras
Możemy zdefiniować model CNN LSTM do wspólnego treningu w Keras.
CNN LSTM można zdefiniować, dodając warstwy CNN na przednim końcu, a następnie warstwy LSTM z gęstą warstwą na wyjściu.
Warto pomyśleć o tej architekturze jako o dwóch podmodelach: modelu CNN do wyodrębniania cech i modelu LSTM do interpretacji cech w krokach czasowych.
Przyjrzyjmy się obu tym modelom podrzędnym w kontekście sekwencji danych wejściowych 2D, które zakładamy, że są obrazami.
Model CNN
W ramach przypomnienia możemy zdefiniować sieć splotową 2D jako składającą się z warstw Conv2D i MaxPooling2D uporządkowanych w stos o wymaganej głębokości.
Conv2D zinterpretuje migawki obrazu (np. Małe kwadraty), a warstwy odpytywania skonsolidują lub wyodrębnią interpretację.
Na przykład poniższy fragment ma zostać odczytany w obrazach 10 × 10 pikseli z 1 kanałem (np. Czarno-biały). Conv2D odczyta obraz w migawkach 2 × 2 i wyprowadzi jedną nową interpretację obrazu 10 × 10. MaxPooling2D połączy interpretację w bloki 2 × 2, zmniejszając wynik do konsolidacji 5 × 5. Warstwa Flatten pobierze pojedynczą mapę 5 × 5 i przekształci ją w 25-elementowy wektor gotowy do obsługi przez inną warstwę, na przykład Gęstą do wyprowadzenia prognozy.
cnn = Sekwencyjny() cnn.Dodaj(Conv2D(1, (2,2), aktywacja=„relu”, wyściółka='podobnie', input_shape=(10,10,1))) cnn.Dodaj(MaxPooling2D(rozmiar basenu=(2, 2))) cnn.Dodaj(Spłaszczyć()) |
Ma to sens w przypadku klasyfikacji obrazu i innych zadań związanych z widzeniem komputerowym.
Model LSTM
Powyższy model CNN jest w stanie obsłużyć tylko jeden obraz, przekształcając go z pikseli wejściowych w wewnętrzną macierz lub reprezentację wektorową.
Musimy powtórzyć tę operację na wielu obrazach i pozwolić LSTM zbudować stan wewnętrzny i zaktualizować wagi przy użyciu BPTT w sekwencji reprezentacji wektorów wewnętrznych obrazów wejściowych.
CNN można naprawić w przypadku użycia istniejącego wstępnie wytrenowanego modelu, takiego jak VGG, do wyodrębniania cech z obrazów. CNN może nie zostać wytrenowany i możemy chcieć go wytrenować przez wsteczną propagację błędu z LSTM w wielu obrazach wejściowych do modelu CNN.
W obu tych przypadkach koncepcyjnie istnieje jeden model CNN i sekwencja modeli LSTM, po jednym dla każdego kroku czasowego. Chcemy zastosować model CNN do każdego obrazu wejściowego i przekazać dane wyjściowe każdego obrazu wejściowego do LSTM jako pojedynczy krok czasowy.
Możemy to osiągnąć, opakowując cały model wejściowy CNN (jedną lub więcej warstw) w warstwę TimeDistributed. Warstwa ta zapewnia pożądany efekt wielokrotnego nakładania tej samej warstwy lub warstw. W tym przypadku zastosowanie go wiele razy do wielu wejściowych kroków czasowych i z kolei zapewnienie sekwencji „interpretacji obrazu” lub „cech obrazu” do modelu LSTM do pracy.
Model.Dodaj(TimeDistributed(...)) Model.Dodaj(LSTM(...)) Model.Dodaj(Gęsty(...)) |
Mamy teraz dwa elementy modelu; połączmy je razem.
Model CNN LSTM
Możemy zdefiniować model CNN LSTM w Keras, najpierw definiując warstwę lub warstwy CNN, opakowując je w warstwę TimeDistributed, a następnie definiując LSTM i warstwy wyjściowe.
Mamy dwa sposoby zdefiniowania modelu, który jest równoważny i różni się jedynie gustem.
Możesz najpierw zdefiniować model CNN, a następnie dodać go do modelu LSTM, opakowując całą sekwencję warstw CNN w warstwę TimeDistributed w następujący sposób:
# zdefiniuj model CNN cnn = Sekwencyjny() cnn.Dodaj(Conv2D(...)) cnn.Dodaj(MaxPooling2D(...)) cnn.Dodaj(Spłaszczyć()) # zdefiniuj model LSTM Model = Sekwencyjny() Model.Dodaj(TimeDistributed(cnn, ...)) Model.Dodaj(LSTM(..)) Model.Dodaj(Gęsty(...)) |
Alternatywnym i być może łatwiejszym do odczytania podejściem jest zawijanie każdej warstwy w modelu CNN w warstwę TimeDistributed podczas dodawania jej do modelu głównego.
Model = Sekwencyjny() # zdefiniuj model CNN Model.Dodaj(TimeDistributed(Conv2D(...)) Model.Dodaj(TimeDistributed(MaxPooling2D(...))) Model.Dodaj(TimeDistributed(Spłaszczyć())) # zdefiniuj model LSTM Model.Dodaj(LSTM(...)) Model.Dodaj(Gęsty(...)) |
Zaletą tego drugiego podejścia jest to, że wszystkie warstwy pojawiają się w podsumowaniu modelu i jako takie są obecnie preferowane.
Możesz wybrać preferowaną metodę.
Dalsze czytanie
Ta sekcja zawiera więcej zasobów na ten temat, jeśli szukasz głębszych informacji.
Artykuły na CNN LSTM
Keras API
Posty
Podsumowanie
W tym poście odkryłeś architekturę modelu CNN LSTN.
W szczególności nauczyłeś się:
- O rozwoju architektury modelu CNN LSTM do przewidywania sekwencji.
- Przykłady typów problemów, do których dostosowany jest model CNN LSTM.
- Jak zaimplementować architekturę CNN LSTM w Pythonie za pomocą Keras.
Czy masz jakieś pytania?
Zadaj pytania w komentarzach poniżej, a ja postaram się odpowiedzieć.