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ć!

Tim
źródło
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.

Głoska bezdźwięczna
źródło
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