Galateo del mercato o buone maniere in un campo minato - pagina 21

 
grasn писал(а) >>

Mentre sto creando, devo sembrare un artista! Ma quando sto codificando ... :о)))

PS: Serega, è quasi monopenico in MathCAD, ma in C++/FORTRAN ... sarà diverso, ma in MathCAD - a dir poco no (per questo caso particolare). E se usate mean, conterà ancora più velocemente, e se usate corr, per esempio, il vostro algoritmo "veloce" andrà in tilt :o). Come lo fanno, non lo so, ma per quanto riguarda l'operatore "summing" - è molto più veloce del loop. Se non ce l'hai così - allora metti una versione fresca.

Capito.

Grazie per le informazioni!

 
Neutron >> :

Non dimenticare che è consigliabile insegnare tutte queste cose ad ogni conto alla rovescia - non sarà facile.

Ora ho capito! Stavo contando tutte le commissioni in una pila...

Non ho intenzione di aumentare il numero di neuroni nello strato nascosto. Non vedo perché, funziona bene con due.

Se non vi dispiace, vorrei passare direttamente a ORO, dato che ho già una mesh a due strati pronta e funzionante (anche con scale "da fondo"), se interessati - posso stendere il codice.

 

Finora, ecco cosa ho fatto:



d = 17;

w = 17*3 + 4 = 55;

P = 4*55*55/17 = 712;

------------------------------------------------------------------------


L'algoritmo ORO finora è calcolato in questo modo (solo per i pesi del livello di uscita):

// ----------------------------------------- ЭПОХА ---------------------------------------------------

for(int i = cikl; i > 2; i--)
{
out = OUT(i); // Получаем выход сетки
target = (Close[i]-Close[i+1])/Close[i+1];--------------------// Получаем целевое значение
delta = target - out;-----------------------------------------// Вычитаем выход сетки из целевого значения
pr = th(out);-------------------------------------------------// Вычисляем производную выходного сигнала
pr = 1 - pr*pr;-----------------------------------------------//

for(int n = 0; n < 4; n++)
{
Corr[n] += delta * pr * D2[n];--------------------------------// Вычисляем ошибку для каждого веса и суммируем её за всю эпоху
Norm[n] += Corr[n]*Corr[n];-----------------------------------// Считаем норму вектора коррекций для каждого веса за всю эпоху
}
}
// ------------------------------------- КОНЕЦ ЭПОХИ --------------------------------------------------

// ----------------------------------- КОРРЕКЦИЯ ВЕСОВ ------------------------------------------------

for(i = 0; i < 4; i++)

W2[i] += Corr[i]/MathSqrt(Norm[i]);



Sembra funzionare! Ma c'è ancora qualcosa che non va. Su 1000 epoche tutti i pesi sono diventati molto piccoli:

W2 [0] = 0,0876 W2 [1] = 0,0772 W2 [2] = -0,0424 W2 [3] = -0,05

Cosa mi è sfuggito e come faccio ora a spingere l'errore ai pesi di ingresso?

 
Prival писал(а) >>

Guarda i messaggi privati. Mi scuso per aver scritto qui, ma spesso non riflettono i messaggi.

Sergey, controlla i tuoi messaggi privati.

a paraloco

Vi risponderò un po' più tardi.

Sto lavorando sui dati di ingresso per il NS e l'idea mi è venuta in mente. A proposito, perché hai moltiplicato il numero di pesi per 3 quando hai calcolato la lunghezza del vettore di allenamento? Ho capito che dovresti avere w=17+4 e basta! Stai allenando ogni membro del comitato con il suo vettore personale...

 
Neutron >> :

...A proposito, perché hai moltiplicato il numero di pesi per 3 quando hai calcolato la lunghezza del vettore di allenamento? Immagino che dovresti avere w=17+4 e basta! Stai formando ogni membro del comitato con il suo vettore personale...

In questo caso il vettore di ingresso è lo stesso. Viene letto una volta ad ogni conteggio e poi ogni membro del comitato lo "guarda" attraverso i suoi "punti" personali (pesi) e dà un giudizio.

Naturalmente, può essere letto per ogni membro del comitato separatamente, ma che senso ha se il risultato sarà lo stesso? Il vettore di input è 16 incrementi consecutivi del quoziente + un singolo input.

А... Ho capito! Sì, avevo due diversi vettori di ingresso: il kotir incrementa con dt secondo la serie Fibo - 2,3,5,8... e l'altro dalla serie di Luke - 3,4,7,11... e c'erano solo 2 membri del comitato. Allora, ogni membro del comitato leggeva un vettore diverso, ma ora ho semplificato le cose per concentrarmi sulla comprensione dell'ORO. Quindi il vettore, in questo caso, è uno.

È possibile che i pesi siano scesi così tanto perché ho insegnato solo il secondo strato?

 

Bene, risulta ancora: w=17+4 e ogni membro ha gli stessi vettori.

Paralocus, ecco cosa penso. Non facciamo il passo più lungo della gamba e risolviamo un Perspectron bilayer non lineare con uscita di non linearità in MQL e otteniamo un risultato positivo. Poi passerai a un comitato di reti (se necessario).

Cosa ne pensate?

 
Neutron >> :

Bene, risulta ancora: w=17+4 e ogni membro ha gli stessi vettori.

Paralocus, ecco cosa penso. Non facciamo il passo più lungo della gamba e risolviamo un Perspectron bilayer non lineare con uscita di non linearità in MQL e otteniamo un risultato positivo. Poi passerai a un comitato di reti (se necessario).

Che ne dici?

OK! Quindi facciamo fuori tutti i commissari e il presidente. Una specie di "proiettili gangbusters"... -:) >> Facciamolo.

P/S tranne uno - il primo

 

Bene, allora andiamo!

1. trovare l'errore all'uscita dell'ultimo neurone: d2out=X[-1]-OUT2, (intendo la numerazione come MQL e questo è il conteggio "futuro").

2. Ricalcolarlo tenendo conto della non linearità al suo ingresso: d2in=d2out*(1-OUT2^2)

3. Lo stesso errore va all'uscita di ogni neurone del primo strato tramite il suo assone! Ora, questo errore alle sue uscite è d1out e ripetiamo la procedura (2) ricalcolando al suo ingresso: d1[1]in=d1out*(1-OUT1[1]^2) e allo stesso modo per il secondo neurone dello strato nascosto.

 
I pesi sono corretti dall'errore calcolato, o non ancora?
 

No.

In primo luogo, calcolare la microcorrezione per ogni peso: dw=in*din - regola delta - moltiplicare il segnale di ingresso per l'errore applicato a un particolare ingresso. Poi lo riassumiamo in un sommatore separato per ogni peso su tutti i campioni del vettore di allenamento. I pesi non vengono corretti entro un'iterazione dell'epoca di addestramento. Solo le microcorrezioni e i loro quadrati sono accumulati (in un altro sommatore).

P.S. Ho corretto l'errore nel post sopra. La derivata si trova come segue: *(1-OUT2^2).