Jak dodać funkcje niezwiązane z obrazem obok obrazów bocznych jako dane wejściowe CNN


14

Trenuję splotową sieć neuronową, aby klasyfikować obrazy w warunkach mgły (3 klasy). Jednak dla każdego z około 150 000 obrazów mam również cztery zmienne meteorologiczne, które mogą pomóc w przewidywaniu klas obrazów. Zastanawiałem się, jak mogę dodać zmienne meteorologiczne (np. Temperaturę, prędkość wiatru) do istniejącej struktury CNN, aby pomóc w klasyfikacji.

Jednym ze sposobów, o których już teraz myślę, jest utworzenie kolejnej (małej) sieci neuronowej ze sprzężeniem zwrotnym wzdłuż CNN, a następnie połączenie danych wyjściowych warstw CNN i ukrytych warstw sieci neuronowej bez obrazu w gęstej warstwie.

Drugi sposób, jaki mogłem wymyślić, to po prostu kontaktowanie tych funkcji z gęstą warstwą. Jednak w tym przypadku zmienne niebędące obrazami będą (myślę) tylko w stanie przewidywać liniowo.

Czy istnieją inne (lepsze) sposoby, aby funkcje nieobrazowe mogły zostać uwzględnione w modelu? A jaka byłaby wskazana metoda, biorąc pod uwagę ilość danych, które mam?

Innym pytaniem, jakie mam, jest to, czy powinienem odblokować warstwy splotowe podczas treningu z tymi funkcjami, które nie są obrazami? Te warstwy Resnet-18 (które zostały zainicjowane jako wstępnie przeszkolone w ImageNet) zostały już dokładnie dostrojone przy użyciu obrazów. Domyślam się, że powinienem je zamrozić i tylko odblokować gęstą warstwę, ponieważ tylko tutaj funkcje nie będące obrazami „kontaktują się” z funkcjami obrazu (nie wcześniej w CNN). Jeśli się mylę, proszę to powiedzieć!


możesz modelować rozkład złączeń między dodatkowymi_funkcjami i obrazami za pomocą jakiegoś modelu generatywnego, takiego jak GAN, VAE. wtedy można uzyskać ukryte zmienne i używać ich z nadzorowanym kryterium
— Fadi Bakoura

Sam jestem w podobnej sytuacji. Używam stosu zdjęć nieba z ostatnich 15 minut, aby spróbować prognozować moc paneli słonecznych w pobliżu kamery na 15 minut w przyszłość. Niedawno postanowiłem wprowadzić kilka funkcji pogodowych (po jednej dla każdego zdjęcia, jak w twoim przypadku). Twoja pierwsza sugestia działała znacznie lepiej niż druga (bezpośredniego dodawania nie graficznych funkcji do gęstej warstwy). Mówiąc ściślej, druga sugestia doprowadziła do problemów z normalizacją. Odkryłem, że z jakiegoś powodu nie potrafię jeszcze wyjaśnić, że warstwa Batchnorm nie była w stanie znormalizować funkcji graficznej
— Vignesh Venugopal

@VigneshVenugopal proszę wspomnieć o mnie w komentarzach, w przeciwnym razie nie mogę zostać powiadomiony. Jakie jest Twoje pytanie? :)
— Media

Jak mogę połączyć prędkość, przepustnicę i kąt skrętu z moimi sieciami? Czy mógłbyś wyjaśnić gęstą liczbę dodanych gęstych? Co zależy od tego?
— Nasrinzaghari,

Odpowiedzi:


10

Moje rozwiązanie jest jak twoja pierwsza rekomendacja, ale z niewielkimi zmianami.

  1. Zbuduj warstwy splotowe i układaj je w stos aż do spłaszczenia. Ta sieć powinna być zasilana danymi obrazu.
  2. Płaskie mapy aktywacyjne
  3. Zbuduj w pełni połączoną sieć z pożądaną liczbą neuronów i warstw.
  4. Połącz wyjścia spłaszczonej warstwy siatki splotowej i siatki w pełni połączonej.
  5. dodaj kilka gęstych warstw i połącz je z ostatnią warstwą, która reprezentuje twoje klasy.

W tej architekturze można użyć zwyczajowych funkcji kosztów.


Czy w Keras możesz to zrobić za pomocą Concatenate()warstw?
— Leevo

Tak. Powinieneś połączyć je, aby umieścić je obok siebie.
— Media

Mam użyć Concatenate()czy concatenate()warstw? Nie umiem odróżnić
— Leevo,

Zależy to od sposobu utworzenia sieci. Nawiasem mówiąc, możesz zobaczyć listę argumentów każdego z nich. Różnią się. Możesz także zajrzeć tutaj .
— Media
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.