Jestem całkowicie początkującym, jeśli chodzi o sieci neuronowe. Przez cały dzień zmagałem się z rubin-fann i ai4r i niestety nie mam nic do pokazania, więc pomyślałem, że pójdę na Stack Overflow i zapytam tutaj kompetentnych ludzi.Szkolenia sieci neuronowej w Ruby
Mam zestaw próbek - każdy dzień ma jeden punkt danych, ale nie pasuje do żadnego jasnego wzoru, który udało mi się wymyślić (próbowałem regresji para). Mimo to, myślę, że byłoby fajnie sprawdzić, czy istnieje jakiś sposób przewidywania danych idących w przyszłość od samego początku i myślałem, że sieć neuronowa byłaby dobrym sposobem na wygenerowanie funkcji, która mogłaby wyrazić nadzieję na wyrażenie tego związku. .
Daty są obiektami DateTime, a punkty danych są liczbami dziesiętnymi, jak 7,68. Konwertowałem obiekty DateTime na pływające, a następnie dzieląc je przez 10.000.000.000, aby uzyskać liczbę od 0 do 1, i dzielę liczby dziesiętne przez 1000, aby uzyskać także liczbę od 0 do 1. Mam ponad tysiąc próbki ... oto co krótki fragment wygląda tak:
[
["2012-03-15", "7.68"],
["2012-03-14", "4.221"],
["2012-03-13", "12.212"],
["2012-03-12", "42.1"]
]
które po transformacji wygląda następująco:
[
[0.13317696, 0.000768],
[0.13316832, 0.0004221],
[0.13315968, 0.0012212],
[0.13315104, 0.00421]
]
I niby życzymy ta transformacja nie były konieczne, ale to dygresja. Problem polega na tym, że zarówno ai4r, jak i ruby-fann zwracają jedną stałą liczbę, zwykle coś w środku zakresu próbek, kiedy je uruchamiam. Oto kod dla ruby-FANN:
@fann = RubyFann::Standard.new(:num_inputs=>1, :hidden_neurons=>[3, 3], :num_outputs=>1)
training_data = RubyFann::TrainData.new(:inputs => formatted_data.collect{|d| [d.first]}, :desired_outputs => formatted_data.collect{|d| [d.last]})
@fann.train_on_data(training_data, 1000, 1, 0.0001)
@fann.run([DateTime.now.to_f/10000000000.0]) # Always something random, and always the same number no matter what date I request it for
I ai4r:
@ai4r = Ai4r::NeuralNetwork::Backpropagation.new([1, 3, 3, 1])
1000.times do
formatted_data.each do |data|
@ai4r.train(data.first, data.last)
end
end
@ai4r.eval([DateTime.now.to_f/10000000000.0]) # A different result frmo above, but always seemingly random and the same for any requested date
czuję się jakbym brakuje czegoś naprawdę podstawowe tutaj. Wiem, że jest to raczej otwarte pytanie, ale jeśli ktoś mógłby mi pomóc dowiedzieć się, jak niewłaściwie uczę moich sieci neuronowych, naprawdę bym to docenił!
Jednym z twoich problemów jest to, że masz do czynienia ze zbyt małymi liczbami. Kiedy ustawiam pożądany błąd na 0,0001, nie mogę nawet poprawnie przewidzieć danych treningowych, o których wspomniałeś powyżej. Powinieneś wymyślić jakikolwiek inny sposób kodowania wejścia i wyjścia. Czy rozsądnie jest podać rok, miesiąc i dzień osobnymi danymi wejściowymi? Być może możesz użyć kodowania 1-c-cowego dla dowolnej z tych funkcji (ftp://ftp.sas.com/pub/neural/FAQ2.html#A_cat). – alfa
Mam ten sam problem - czy kiedykolwiek to zrozumiałeś? Musimy zrobić coś złego z siecią neuronową, nie rozumiem ... – Kevin