Skocz do zawartości

Tworzenie SIECI NEURONOWEJ na - Raspberry Pi


Pomocna odpowiedź

Myślę, że tworzenie sieci neuronowej jest jak najbardziej możliwe. Może poszukać bibliotek w C++. Nie jest konieczny Matlab. Co prawda można używać go do generacji kodu C dla danej platformy (niekoniecznie PC). Podobnie Labview. Można nim programować Rio.

Nie lepiej już użyć matlaba na PC i eksportować gotową sieć na RPi, albo i lepiej - zrobić sobie komunikację RPI <> PC i obciążyć obliczeniami PCta? Generalnie sieć można zaimplementować wszędzie. Ja swego czasu (gdzieś na forbocie jest mój projekt) implementowałem sieć na mikrokontrolerze dsPIC30F z tym, że proces uczenia był przeprowadzany na PC (w zależności od wielkości zbioru danych potrafił trwać nawet kilka minut). Np. obecnie robię implementacje na karcie graficznej, co daje mi możliwość symulacji nawet do miliona połączeń synaptycznych. Obawiam się, że z RPi nie osiągniesz dużej wydajności. Jednak wszystko się rozbija o problem, który masz. Jeżeli chcesz rozwiązać zadanie omijania przeszkód, to spokojnie ten mikrokomputer wystarczy nawet, aby w każdym cyklu użyć np. propagacji wstecznej do nauki sieci. Jest wiele bibliotek pod C++, nie musi być to odrazu Matlab 🙂

@deshipu, nie zgodzę się, że sieci neuronowe mają mało zastosowań.

@deshipu, nie zgodzę się, że sieci neuronowe mają mało zastosowań.

A gdzie jeszcze widzisz zastosowanie poza rozpoznawaniem obrazu i dźwięku? Wszędzie gdzie się da napisać algorytm na piechotę, to będzie on lepszy.

@deshipu, nie zgodzę się, że sieci neuronowe mają mało zastosowań.

A gdzie jeszcze widzisz zastosowanie poza rozpoznawaniem obrazu i dźwięku? Wszędzie gdzie się da napisać algorytm na piechotę, to będzie on lepszy.

Pomijając przykłady, które podałeś: robot omijający przeszkody (ogólnie symulacja zachowań), ogólnie zadania rozpoznawania i klasyfikacji, przetwarzanie sygnałów, automatyka (jako np. model systemu czy układ sterujący), pamięć i jeszcze wiele wiele innych zastosowań. Szczególnie, jeżeli weźmiemy pod uwagę modele zbliżone do biologiczynch.

A może użyć jakiejś biblioteki na C++ do sieci neuronowych. Kiedyś miałem na C#. Jedną z nich jest AForge.NET. Były tam zaimplementowane tworzenie sieci, metody uczenia, symulacja. Sieć można nauczyć faktycznie na PC, co prawda jak jest RAM 1GB na RPi to powinno starczyć nawet do uczenia. Stosowanie pakietów obliczeniowych typu Matlab tzn. aby je normalnie zainstalować wymaga wydajnej maszyny - i chyba niepotrzebnie jeśli przedmiotem projektu jest tylko sieć neuronowa. Co prawda Matlab może tworzyć sam kod C, który można by skompilować pod Rpi - ale nie wszystko pójdzie.

Ja znalazłem coś takiego http://opennn.cimne.com/ . Ale nie testowałem.

[ Dodano: 21-12-2015, 17:03 ]

@deshipu, nie zgodzę się, że sieci neuronowe mają mało zastosowań.

A gdzie jeszcze widzisz zastosowanie poza rozpoznawaniem obrazu i dźwięku? Wszędzie gdzie się da napisać algorytm na piechotę, to będzie on lepszy.

Np. regulatory rozmyte - sterowanie adaptacyjne

Jeżeli autor zbuduje sobie sieć jednokierunkową, złożoną z kilku warstw i wykorzysta algorytm propagacji wstecznej, to to spokojnie powinno pójść nawet na mikrokontrolerze, nie obawiałbym się o wydajność tego na RPi.

Może warto po prostu sprawdzić któreś rozwiązania? Np. google podpowiada to.

A masz może pod ręką jakiś przykład układu omijania przeszkód opartego na sieci neuronowej, który byłby pod jakimkolwiek względem lepszy od zaprogramowanego ręcznie?

Zależy co masz na myśli, przez 'zaprogramowany ręczie'. Rzucę dla przykładu mój robot. Jeżeli 'ręcznie' znaczy zaprogramować poszczególne zakresy poprzez warunki if-else, to uważam, że ann jest lepsza - 'naturalniej' uczymy robota działania. Wystarczy dodać algorytm uczący i możemy uczyć naszego robota, bez potrzeby przeprogramowywania go za każdym razem.

Zależy co masz na myśli, przez 'zaprogramowany ręczie'.

Mam na myśli porządny algorytm napisany przez ludzkiego programistę po gruntownym przemyśleniu i przeanalizowaniu problemu.

Rzucę dla przykładu mój robot. Jeżeli 'ręcznie' znaczy zaprogramować poszczególne zakresy poprzez warunki if-else, to uważam, że ann jest lepsza - 'naturalniej' uczymy robota działania. Wystarczy dodać algorytm uczący i możemy uczyć naszego robota, bez potrzeby przeprogramowywania go za każdym razem.

Chyba żartujesz. Przecież takie omijanie przeszkód zrobisz "na piechotę" w kilkudziesięciu liniach kodu bez specjalnego wysiłku, a jak sięgniesz po istniejące algorytmy SLAM, to możesz mieć praktycznie optymalne znajdowanie drogi z tymi sensorami. Bez konieczności uczenia dla konkretnego układu przeszkód.

Zgadzam się, że z akademickiego punktu widzenia fakt, że robot "sam" (ale też nie do końca, bo w końcu go do tego zaprogramowałeś) się uczy jest bardzo ciekawe, ale w praktyce jak chcesz rozwiązać konkretny problem, to ciężko pobić kod napisany przez człowieka. Wyjątkiem są oczywiście takie rzeczy jak analiza obrazu czy innych sygnałów -- ale i tutaj istnieją algorytmy, które dają w konkretnych przypadkach dużo lepsze rezultaty niż sieć neuronowa.

[N]ie mogę tutaj umieścić żadnych schematów, wzorów, dokładnych opisów, spisu elementów, kodu programu - proszę nawet o to nie pytać.

Bez komentarza.

Są problemy dobrze zdefiniowane i wówczas korzystanie z metod sztucznej inteligencji nie ma wówczas sensu. Ale ostatnio korzystałem z sieci neuronowej do prognozowania wielkości na podstawie danych historycznych oraz innych wielkości współzależnych. Wówczas nie musisz dokładnie znać nawet najbardziej zawiłej zależności. Sieć na podstawie danych się jej nauczy. Wiele regulatorów ją wykorzystuje a użytkownicy nawet nie są tego świadomi.

[ Dodano: 22-12-2015, 08:47 ]

Są problemy dobrze zdefiniowane i wówczas korzystanie z metod sztucznej inteligencji nie ma wówczas sensu. Ale ostatnio korzystałem z sieci neuronowej do prognozowania wielkości na podstawie danych historycznych oraz innych wielkości współzależnych. Wówczas nie musisz dokładnie znać nawet najbardziej zawiłej zależności. Sieć na podstawie danych się jej nauczy. Wiele regulatorów ją wykorzystuje a użytkownicy nawet nie są tego świadomi.

Podobnie z algorytmami genetycznymi/ewolucyjnymi. Jeśli mamy dobrą metodę do rozwiązania zadania optymalizacji (np. funkcja celu jest różniczkowalna) to stosujemy klasyczne metody np. najszybszego spadku. W bardziej skomplikowanych (a takie są w technice) musimy wykorzystać inne np. algorytmy ewolucyjne, symulowane wyżarzanie lub hybrydowe

Może warto po prostu sprawdzić któreś rozwiązania? Np. google podpowiada to.

Sprawdzę Fast Artificial Neural Network. Wymyślę jakieś zadanie i zrealizuję na RPi. Dam znać co wyszło. Jeśli chodzi o środowiska Matlab, Scilab, Octave to ogromne środowiska w których zaimplementowano wiele bibliotek obliczeniowo-symulacyjnych lecz standardowo kod jest interpretowany - zatem wykonywany nie najszybciej.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...