Wpis z mikrobloga

Zaprojektowałem sieć neuonową do rozpozpoznawania owoców na podstawie obrazów. Obrazy są znormalizowane do wielkości 100x100 pikseli i opisane za pomocą wektora gradientów z którego każdy ma długość 2900.

Do tego napisałem z pomocą kodu z neta sieć neuronową dwuwarstwową MLP z pomocą numpy, gdzie warstwa ukryta ma regulowaną długość, a warstwa wyjściowa to wektor klasyfikowanych owoców. Dla wektora wejściowego o długości np 4 sieć działa bez problemu, jednak kiedy daje na wejście mój wektor obrazów, sieć działa tylko do 10 neuronów w warstwie ukrytej, ze względu na duże tablice wag synaps dla większej ilości neuronów oraz ma overflow na funkcji aktywacji, czyli krótko mówiąc lipa.

Czy jest tu może ktoś kto rozwiązywał podobny problem klasyfikacji obiektów na podstawie obrazów lub jakiś osoba orientująca się w temacie? Możliwe, że sposób opisu deskryptorów mógłbym zrobić w inny sposób, jednak ten wydał mi się dobry, minusem jest jedynie długość wektora, nie modyfikowałem wielkości liczb wektora wejściowego.

Liczę na jakieś podpowiedzi co do możliwości rozwiązania problemu, jednak nie interesuje mnie korzystanie z kernela czy scilaba, moim założeniem jest by zbudować sieć bazującą jedynie na własnych obliczeniach. Miejcie też wyrozumiałość do mojej nieznajomości tematu, ale od czegoś trzeba zacząć ;)

#programowanie #siecineuronowe #machinelearning
  • 23
@mojemirabelki:

warstwa wyjściowa to wektor klasyfikowanych owoców

Nie za bardzo rozumiem, wymiar Twojej warstwy wejściowej zależy od ilości przykładowych zdjęć?

Zgaduję że jako że Twoja ukryta wartstwa to zwykła warstwa fully connected i w takim wypadku używasz jakiegoś dekodera czy tam feature extractora który opisuje obraz w postaci n-elementowego wektora i wtedy wejście sieci ma n wymiarów.

No i kiedy Ci się to wywala, w trakcie treningu czy predykcji?
Czy w
@Poziokat: o batch size nie słszałem sprawdzę

Jeśli chodzi o wektor wejściowy to jest to tablica Xn obrazów, gdzie każdy xi to wynik opisu deskryptora obrazu.
Na wejście sieci podaje cały zestaw swoich danych X i Y i uruchamiam pętlę o długości wektora Xn, w której trenuje kolejne epoki(w moim rozumieniu zestawy danych* moge się mylić) za pomocą wstecznej propagacji błędów.

Każda taka epoka wykonuje predykcje na podstawie xi, i z
@mojemirabelki: Ale rozumiem że wejście sieci w architekturze ma wymiar jednego deskryptora Xi a nie wszystkich? Czytaj architektura jest niezależna od ilości przykładów. Jeżeli jest to na tym poziomie jest kolosalny błąd i nie zadziała.

Co do samego treningu jedna epoka to jest przedział w którym przez propagację przeliczymy wszystkie przykłady.
No i przykłady takie przeliczamy często w grupach, tzw batchach.
W skocie chodzi o to że jakbyś updatował wagi dla
@Poziokat: rozwiałeś mi trochę wątpliwości co do uczenia, rzeczywiście spróbuje to podzielić na batche, jednak jeszcze nie wiem czy to znów mi się nie wywali na moich wagach, bo w teorii pomiędzy moją pierwszą warstwą 2,9k a drugą która nie wiem ile ma mieć neuronów, ale znajomy podpowiadał, że sam twrzył z 2n-1 gdzie n to liczba wejściowych, to sama macierz wag pomiędzy pierwszymi warstwami będzie ogromna.
@mojemirabelki: No dość oczywiste że przy fully conneced będzie ogromna, przy działaniu na obrazach używa się głównie konwolucyjnych sieci, wtedy stara się w miarę zmniejszyć ilość danych przed warstwą FC żeby nie było tam aż tyle wag. Może wybierz sobie jakieś dane o mniejszej ilości w ymiarów na początek? Będzie prościej.

@darkelf: Tak to wszystko może być bez sensu, niech się chłopak uczy jak chce, w taki sposób więcej zrozumie
@Poziokat: uważam że lepiej się nauczyć korzystając z kerasa i potem jak chcesz zejść niżej niż zaczynać od pisania mnożenia macierzy i po godzinie przerzucić się na klikanie śmiesznych obrazków bo zapał się skończył
bo w teorii pomiędzy moją pierwszą warstwą 2,9k a drugą która nie wiem ile ma mieć neuronów,


@mojemirabelki: ML wygląda tak, że tworzysz model, uczysz go, sprawdzasz jak działa, zmieniasz architekturę, czyli np. liczbę neuronów, robisz to wiele razy, nie zgadniesz tej liczby, nikt Ci nie jej poda
@darkelf: Zależy od osoby, nie każdy się zniechęci bo trudne. Jakbym miał tylko odpalić coś gotowego i zobaczyć że działa to bym się zanudził. W sumie TF wprowadził ostatnio jakieś takie sieci w black boxie czy coś podobnego, gdzie nie trzeba chyba nawet architektury podawać...