PDA

Zobacz pełną wersję : Sieci neuronowe



Robster
23-11-2010, 23:18
Zaspamuje ten dział do reszty :)

Szukam kogoś kto by się orientował w temacie sieci neuronowych, a dokładniej ich wykorzystania w predykcji szeregów czasowych. Ewentualnie coś na temat algorytmu sieci Elmana do tematu z wyżej.

Bieda na ten temat w sieci straszna, a ludzie niechętnie się tą wiedzą dzielą. Tutaj zazwyczaj ktoś jakimś linkiem rzuca, wiec nie zaszkodzi zapytać :)

kepwoj
24-11-2010, 10:11
niestety nie posiadam na materiałów na ten temat, ale jest taki gość z polibudy świętokrzyskiej, który na ten temat wie bardzo dużo (wydał kilka pozycji na temat sieci neuronowych) - nazywa się Marian Gorzałczany

Robster
24-11-2010, 14:53
Z tego co wyczytałem, ten Pan nie ma żadnej publikacji na temat predykcji szeregów w sieciach neuronowych.

kepwoj
24-11-2010, 15:41
no to musisz szukać dalej - powodzenia

palyga007
24-11-2010, 16:07
Wychodzi na to że to pewnie będzie tylko jeden jedyny człowieczek w Polsce pewnie. Także pozwolę sobie wprowadzić szczyptę humoru tak apropos wyspecjalizowanych specjalistów :p

W wersji AGH był to jakiś mityczny prof. Szulc od matematyki - specjalista od całek wszelakich.Profesor ów mając dość niedouczonego delikwenta powiedział mu:
- Ja panu dam do domu całkę do rozwiązania, jak pan przyniesie rozwiązaną to pan zaliczył.
Student poleciał od razu z całką do swojej matematyczki z LO, ale ta tylko spuściła szczękę na dół i wysłała go do jakiegoś prof. z Polibudy. Ten spuścił szczękę na dół, ale dał mu kontakt do jakiegoś stowarzyszenia matematyków którzy się w tego typu zadaniach lubowali. Ze stowarzyszenia przyszła odpowiedź: "Tego rodzaju całki rozwiązuje prof. Szulc z AGH"

Wiem, że suchar ale jakoś tak mi przypomina tą sytuację:)
@Robster
Powodzenia w szukaniu ;]

Robster
24-11-2010, 16:18
Hehehe szukam już od jakichś 3-4 tygodni. O implementacji sieci neuronowych "od podstaw" znalazłem dwie zagraniczne pozycje, opasłe księgi po 600 stron. A o analizie/predykcji szeregów w tych sieciach prawie NIC. Wszędzie można przeczytać teksty typu - "sieci neuronowe są wykorzystywane do predykcji ciągów czasowych"/"są bardzo przydatne przy prognozowaniu szeregów czasowych" i tyle. Jak to się robi, jakich algorytmów używa, to już tajemnica kilku osób które to wymyśliły.

Craft
24-11-2010, 17:35
Może to pomoże?
http://www.scribd.com/doc/13570148/M-StanekPredykcja-Danych-w-Szeregach-Czasowych

Robster
24-11-2010, 18:10
No niestety nie. Znalazłem to już dużo wcześniej, niestety nie ma tam nic na temat algorytmu predykcji czy wzorów, którymi mógłbym obliczyć wagi. Jedyne wzory które tam są to wzory na błąd predykcji, a ja mam już jego odpowiednik zaimplementowany.

Craft
24-11-2010, 18:18
Wydaje mi się, że tu znajdują się potrzebne Ci wzory
http://www.sciencedirect.com/science?_ob=MImg&_imagekey=B6WGK-4GJM3M2-1-1&_cdi=6825&_user=10&_pii=S0890540105000751&_origin=search&_coverDate=08%2F25%2F2005&_sk=997989998&view=c&wchp=dGLzVtb-zSkzk&md5=b8b7c27bcd5b6fc64bee5d2b18f017df&ie=/sdarticle.pdf
Jeżeli nie więcej nie spamuje ;)

EkleErs
24-11-2010, 18:20
tez pospamuje zal pozdrawiam

Craft
24-11-2010, 18:26
Jeszcze dwa linki:
http://www.ebookee.com/MATLAB-Software-for-the-Code-Excited-Linear-Prediction-Algorithm-The-Federal-Standard-1016_764862.html

I do płatnych książek związanych z tematem:
http://portal.acm.org/results.cfm?h=1&cfid=115752114&cftoken=75172636

Robster
24-11-2010, 18:38
Wydaje mi się, że tu znajdują się potrzebne Ci wzory
http://www.sciencedirect.com/science?_ob=MImg&_imagekey=B6WGK-4GJM3M2-1-1&_cdi=6825&_user=10&_pii=S0890540105000751&_origin=search&_coverDate=08%2F25%2F2005&_sk=997989998&view=c&wchp=dGLzVtb-zSkzk&md5=b8b7c27bcd5b6fc64bee5d2b18f017df&ie=/sdarticle.pdf
Jeżeli nie więcej nie spamuje ;)

Oj chyba nie :) Tam jest coś o wyliczaniu trajektorii oraz badaniu obciążalności algorytmu. Predykcja tam przedstawiona nie tyczy się sieci, a zwykłej analizy matematycznej, z którą teraz walczę i przerabiam na coś co będzie funkcjonowało z sieciami. Zresztą mogę się mylić, bo mój angielski poza kinem jest dość bezużyteczny.

EDIT:
Kolejne linki tyczą się Matlaba, w którym ten program już zrobiłem :) Tam ta sieć jest zaimplementowana i wywołuje się ją funkcją, a ja ta funkcję muszę napisać w C#.

----------
Jeśli ktoś będzie jeszcze wiedział jak mi pomóc, to proszę o info na PW. Forum jest o J!, a ja zapytałem bo miałem nadzieję (widać słusznie) na jakiś odzew (desperację w poszukiwaniu rozwiązania już pomijam).

mjmartino
25-11-2010, 18:43
%APPELM1 Demonstrates Elman recurrent network.

% Mark Beale, 12-15-93
% Copyright 1992-2002 The MathWorks, Inc.
% $Revision: 1.18 $ $Date: 2002/03/25 16:51:26 $


echo on

% NEWELM - Inititializes an Elman recurrent network.
% SIM - Simulates an Elman recurrent network.
% TRAIN - Trains an Elman recurrent network.

% AMPLITUDE DETECTION:

% Using the above functions an Elman network is trained
% to output the amplitude of a sine wave being presented
% in time.

pause % Strike any key to continue...

% DEFINING THE PROBLEM
% ====================

% The first wave form has an amplitude of 1.

p1 = sin(1:20); % If input is wave with amplitude of 1
t1 = ones(1,20); % then output should be 1

% The second wave form has an amplitude of 2.

p2 = sin(1:20)*2; % If input is wave with amplitude of 2
t2 = ones(1,20)*2; % then output should be 2

% The network will be trained on the sequence formed by
% repeating each wave form twice.

p = [p1 p2 p1 p2];
t = [t1 t2 t1 t2];
Pseq = con2seq(p);
Tseq = con2seq(t);

pause % Strike any key to define the Elman network...

% DEFINE THE EHLMAN NETWORK
% =========================

% The function NEWELM creates an Elman network whose input
% varies from -2 to 2, and has 10 hidden neurons and 1 output.

net = newelm([-2 2],[10 1],{'tansig','purelin'},'traingdx');
net.trainParam.epochs = 500;
net.trainParam.show = 5;
net.trainParam.goal = 0.01;

pause % Strike any key to train the Elman network...

% TRAINING THE ELMAN NETWORK
% ===========================

% TRAIN trains Elman networks. Here it is trained
% without training paramters. (The default will be used.)

% Training begins...please wait, this takes a while...

tic
[net,tr] = train(net,Pseq,Tseq);
toc

% ...training done.

semilogy(tr.epoch,tr.perf)
title('Mean Squared Error of Elman Network')
xlabel('Epoch')
ylabel('Mean Squared Error')

pause % Strike any key to test the Elman network...

% TESTING THE ELMAN NETWORK
% =========================

% SIM simulates an Elman network for as many timesteps
% as input vectors in P.

a = sim(net,Pseq);

% The network outputs and targets can then be plotted.

time = 1:length(p);
plot(time,t,'--',time,cat(2,a{:}))
title('Testing Amplitute Detection')
xlabel('Time Step')
ylabel('Target - - Output ---')

% The network does a fairly good job, if not perfect.

pause % Strike any key to test the network's generalization...

% CHECKING GENERALIZATION
% =======================

% We will try waveforms with amplitudes of 1.6 and 1.2.

p3 = sin(1:20)*1.6; % Input wave with amplitude of 1.6
t3 = ones(1,20)*1.6; % We would like the output to be 1.6.

p4 = sin(1:20)*1.2; % Try input wave with amplitude of 1.2
t4 = ones(1,20)*1.2; % We would like the output to be 1.2.

% Repeating each twice results in the series of test inputs.

pg = [p3 p4 p3 p4];
tg = [t3 t4 t3 t4];
pgseq = con2seq(pg);

pause % Strike any key to see generalization results...

% GENERALIZATION RESULTS
% ======================

% SIM is used to simulate the network to these inputs.

a = sim(net,pgseq);

% The network outputs and targets are plotted.

time = 1:length(pg);
plot(time,tg,'--',time,cat(2,a{:}))
title('Testing Generalization')
xlabel('Time Step')
ylabel('Target - - Output ---')

% The network does not do as well for amplitudes for
% which it was not trained.

pause % Strike any key for conclusions...

% CONCLUSIONS
% ===========

% The Elman recurrent network can learn to recognize time-
% varying patterns.

% In this case the network did a fairly good job with only
% 10 neurons in the recurrent layer, and 500 training epochs.

% More recurrent neurons and longer training times could be
% used to increase the network's accuracy on the training data.

% Training the network on more amplitudes will result in
% a network that generalizes better.

% Type HELP ELMAN for a list of all Elman functions.

echo off
disp('End of APPELM1')

Nie znam języka.. ;P
http://www.springerlink.com/content/2373q6k13q5p586t/
http://www.springerlink.com/content/t262x54p763833w3/
http://ieeexplore.ieee.org/Xplore/login.jsp?url=http%3A%2F%2Fieeexplore.ieee.org%2Fi el5%2F5453385%2F5453559%2F05453579.pdf%3Farnumber% 3D5453579&authDecision=-203
http://www.sciencedirect.com/science?_ob=ArticleURL&_udi=B6V1X-3W37PTB-1&_user=10&_coverDate=04%2F30%2F1999&_rdoc=1&_fmt=high&_orig=search&_origin=search&_sort=d&_docanchor=&view=c&_acct=C000050221&_version=1&_urlVersion=0&_userid=10&md5=061b49a27fa2b0c7dc991bd9b55fee08&searchtype=a
Dwa ostatnie płatne.

To jest dział do rzeczy nie związanych z J ;) wiec luzik myślę że można dyskutować...
Poza tym poco porywałeś się na taki temat pracy dyp. zapewne ;> ambitne prace są najgorsze.. ;/


Rada na dziś .... zleć to po prostu komuś zlecenia.net czy coś takiego jest portal ktoś rozumy się odezwie i może za rozsądna cene to wykona..

Robotyka
25-11-2010, 19:24
@Robster - mam do Ciebie pytanie co Ci dokładnie potrzebne i do czego.

Chodzi mi o to jakie jest twoje zadanie a tu nasuwają mi się następujące możliwości
1) Potrzebujesz teorii
2) Potrzebujesz "nauczyć sieć" używając do tego specjalistycznego programu np. STATISTICA z dodatniem Neural Networks
3) chcesz taki program jak w punkcje 2 sam napisać
4) Chcesz zaimplementować sieć w jakimś swoim programie

Takie są standardowe szukane informacje - które cie interesują może będę w stanie pomóc.

Robster
25-11-2010, 20:08
@mjmartino ambicja zawsze mnie gubi, ale jak nie teraz to nigdy nie zmuszę się do nauki tego. Zlecać też nie chcę tego nikomu, jak już to tylko zaimplementowanie sieci, tyle że już to zrobiłem :)

@Robotyka wcześniej programowałem sieciami w MATLABIE, ale jak pewnie wiesz, tam kwestia sieci jest banalna. Teorii rzeczywiście mi potrzeba, ale jak dobrze wiesz tego jest w cholernie i jeszcze trochę, a kilka książek mam już za sobą. Zresztą jak niejednokrotnie tutaj powtarzałem, uczę się w praktyce, teoretyczne przyswajanie wiedzy idzie mi strasznie topornie.
Program ma być wykonany w C++ lub C#, wszystkie programy przeznaczone do pracy z sieciami, ktore mają zaimplementowane algorytmy sieci i gotowe rozwiązania jak w MATLABIE odpadają.

Ogólnie rzecz biorąc ma to być najprostszy z możliwych programów do rekurencji szeregów czasowych z wykorzystaniem rekurencyjnych sieci neuronowych. Przerobiłem już nieco program z siecią Elmana do rozwiązywania zadania XOR. Mam sigmoidalną funkcję aktywacji i jakieś tam dane wejsciowe. Moj problem polega na tym, że nie wiem jak odbywa się predykcja szeregów w sieciach neuronowych. Odpalam program, wagi się dopasowuja, wyniki pojawiają się takie jakie pojawiać się powinny, ale to dalej jest nauka wzorców, a nie predykcja.

Wiesz może jak się to realizuje, bo we wszelkiej literaturze jest to skwitowane zdaniem "predykcja to określenie wartości wyjściowej dla n+1"?

Robotyka
25-11-2010, 20:54
Moj problem polega na tym, że nie wiem jak odbywa się predykcja szeregów w sieciach neuronowych. Odpalam program, wagi się dopasowuja, wyniki pojawiają się takie jakie pojawiać się powinny, ale to dalej jest nauka wzorców, a nie predykcja.

Wiesz może jak się to realizuje, bo we wszelkiej literaturze jest to skwitowane zdaniem "predykcja to określenie wartości wyjściowej dla n+1"?

Według mnie między uczeniem zwykłej sieci a uczeniem sieci predykcyjnej niema wielkiej różnicy, to znaczy w obu przypadkach określasz zbiór uczący z wejściami i wyjściami.
W przypadku nauki wzorców masz dane wejściowe i wzorzec a w przypadku szeregów czasowych dane wejściowe (dane z chwil od t-n do t gdzie n liczba neuronów wejściowych) oraz daną wyjściową (daną z chwili t+1),

Podsumowując jedyna różnica występuje w przygotowaniu danych uczących, nie poprę tego żadnymi linkami czy literaturą. To co napisałem pamiętam z czytania literatury do magisterki.

Robster
25-11-2010, 21:19
No właśnie u mnie jest problem z tym t+1. Nie wiem jak go do sieci wrzucić.