6

Obiekty, które widziałem w akcji to tylko XOR, który jest tylko dwoma małymi tablicami danych ... Nie byłem w stanie dowiedzieć się niczego z dokumentacji na MLDataSet.Encog - Jak załadować dane treningowe dla sieci neuronowej

Wygląda na to, że wszystko musi być załadowane jednocześnie. Chciałbym jednak przechodzić przez dane treningowe, aż dotrę do EOF, a następnie policzę to jako 1 epokę. Jednak wszystko, co widziałem, wszystkie dane muszą być załadowane do 1 tablicy 2D od początku. Jak mogę to obejść?

I've read this question, and the answers didn't really help me. Poza tym nie znalazłem tutaj podobnego pytania.

+0

Z ciekawości: dlaczego chcesz przesyłać strumieniowo dane, czy jest to pytanie o pamięć/wolumen? –

+1

@ ElmarWeber, ponieważ dane są dość duże, a co ważniejsze, mam już wdrożenie z inną siecią neuronową. Implementacja wstecznie przenosi pojedyncze wejście na raz i właśnie przechodzę przez cały plik wejściowy i wywołuję mlp.backprop (nextInput) dla każdego przeskanowanego przedmiotu. – jonbon

Odpowiedz

2

Jest to możliwe, możesz użyć istniejącej implementacji zestawu danych, który obsługuje operację strumieniową lub możesz zaimplementować własne na podstawie dowolnego źródła, które posiadasz. Sprawdź kod the BasicMLDataSet interface i SQLNeuralDataSet jako przykład. Będziesz musiał zaimplementować kodek, jeśli masz określony format. W przypadku CSV jest już implementacja, nie sprawdziłem, czy jest ona oparta na pamięci.

Pamiętaj, że w takim przypadku Twoje dane będą przesyłane strumieniowo w pełnym zakresie dla każdej epoki, a z mojego doświadczenia wynika, że ​​jest to o wiele większe wąskie gardło niż faktyczne obliczenia sieci.

+1

Zasadniczo dane, z których ćwiczę sieć pochodzą z Brown Corpus. Nie przypomina to przykładów z prostym XOR, w którym mogę go zakodować. Obecnie mam pliki Brown Corpus, w których każde słowo i znaczniki są oddzielone spacjami. Sieć, której obecnie używałem, nie ładowała całego korpusu do pamięci, ale ładowała zdanie po zdaniu i trenując (przesuwając wstecz) po jednym słowie na raz. Czy to ma sens? Po prostu próbuję użyć innej sieci, ponieważ myślę, że może to być błąd w sieci, z której aktualnie korzystam. – jonbon

+0

Nie jestem pewien, czy dobrze to rozumiem, ale sposób w jaki to opisujesz, oznaczałby, że sposób, w jaki SQLNeuralDataSet jest zaimplementowany, zadziała, prawda? Kodujesz wartości wejściowe i wyjściowe dla każdego słowa, uruchamiasz backprop, dostajesz następną itd. Jeśli naprawdę chcesz przejść wiersz po wierszu i nie pracować w partiach, jak to robi domyślna implementacja, po prostu ustaw rozmiar wsadu na jeden. Na koniec masz dwa fragmenty kodu: dane korpusu do MLData dla pojedynczego elementu wejściowego i wyjściowego oraz coś, co podaje ten wiersz po wierszu. –

+1

Okay, fakt, że używam pliku tekstowego, a nie SQL, sprawił, że nawet nie biorę pod uwagę SQLNeuralDataSet, dzięki, zaglądnę w to! – jonbon