La etiqueta del mercado o los buenos modales en un campo de minas - página 21

 
grasn писал(а) >>

Mientras estoy creando, tengo que parecer un artista. Pero cuando estoy codificando... :о)))

PD: Serega, es casi monopénico en MathCAD, pero en C++/FORTRAN ... será diferente, pero en MathCAD - por decirlo suavemente no (para este caso particular). Y si usas la media, contará aún más rápido, y si usas corr, por ejemplo, tu algoritmo "rápido" será una tortuga :o) Cómo lo hacen, no lo sé, pero en cuanto al operador "suma" - es mucho más rápido que el bucle. Si no lo tienes así - entonces pon una versión fresca.

Lo tengo.

Gracias por la información.

 
Neutron >> :

No olvides que es aconsejable enseñar todo esto en cada cuenta atrás, no será fácil.

Ahora lo entiendo. Estaba contando todos los comités en una pila...

No voy a aumentar el número de neuronas en la capa oculta. No veo por qué, funciona bien con dos.

Si no te importa, me gustaría pasar directamente a ORO, ya que tengo una malla de dos capas lista y funcionando (incluso con escalas "de fondo"), si te interesa - puedo poner el código.

 

Hasta ahora, esto es lo que he hecho:



d = 17;

w = 17*3 + 4 = 55;

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

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


El algoritmo de ORO hasta ahora está calculado así (sólo para los pesos de la capa de salida):

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

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]);



Parece que funciona. Pero algo sigue fallando. A lo largo de 1000 épocas todos los pesos se han vuelto muy pequeños:

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

¿Qué me he perdido y cómo puedo trasladar ahora el error a los pesos de entrada?

 
Prival писал(а) >>

Mira los mensajes privados. Pido disculpas por escribir aquí, pero a menudo no reflejan los mensajes.

Sergey, revisa tus mensajes privados.

a la parálisis

Le responderé un poco más tarde.

Estoy trabajando en los datos de entrada para el NS y se me ocurrió la idea. Por cierto, ¿por qué has multiplicado el número de pesos por 3 al calcular la longitud del vector de entrenamiento? Tengo entendido que hay que tener w=17+4 y ya está. Estás formando a cada miembro del comité con su propio vector personal...

 
Neutron >> :

...Por cierto, ¿por qué has multiplicado el número de pesos por 3 al calcular la longitud del vector de entrenamiento? Entiendo que debe tener w=17+4 y ya está. Estás formando a cada miembro del comité con su propio vector personal...

En este caso el vector de entrada es el mismo. Se lee una vez en cada recuento y luego cada miembro del comité lo "mira" a través de sus "puntos" personales (pesos) y emite un juicio.

Por supuesto, puede leerse para cada miembro de la comisión por separado, pero ¿de qué sirve si el resultado será el mismo? El vector de entrada son 16 incrementos consecutivos del cociente + una sola entrada.

А... Lo entiendo. Sí, solía tener dos vectores de entrada diferentes: el kotir se incrementa con dt según la serie Fibo - 2,3,5,8... y el otro por la serie de Lucas - 3,4,7,11... y sólo había 2 miembros del comité. Entonces, cada miembro del comité leía un vector diferente, pero ahora he simplificado las cosas para centrarme en la comprensión de la ORO. Así, el vector, en este caso, es uno.

¿Podría haber bajado tanto el peso porque sólo he enseñado la segunda capa?

 

Pues bien, sigue resultando: w=17+4 y cada miembro tiene los mismos vectores.

Paralocus, esto es lo que pienso. No nos adelantemos y resolvamos un Perspectron no lineal bicapa con salida no lineal en MQL y obtengamos un resultado positivo. A continuación, pasará a un comité de redes (si es necesario).

¿Qué te parece?

 
Neutron >> :

Pues bien, sigue resultando: w=17+4 y cada miembro tiene los mismos vectores.

Paralocus, esto es lo que pienso. No nos adelantemos y resolvamos un Perspectron no lineal bicapa con salida no lineal en MQL y obtengamos un resultado positivo. A continuación, pasará a un comité de redes (si es necesario).

¿Qué dices?

¡BIEN! Así que sacamos a todos los comisarios y al presidente. Una especie de "balas de gánster"... -:) >> Hagámoslo.

P/S excepto uno - el primero

 

Bueno, entonces vamos.

1. encontrar el error a la salida de la última neurona: d2out=X[-1]-OUT2, (me refiero a la numeración como MQL y esta es la cuenta "futura").

2. Recalcularla teniendo en cuenta la no linealidad en su entrada: d2in=d2out*(1-OUT2^2)

3. ¡El mismo error va a la salida de cada neurona de la primera capa por su axón! Ahora, este error en sus salidas es d1out y repetimos el procedimiento (2) recalculando en su entrada: d1[1]in=d1out*(1-OUT1[1]^2) y de la misma manera para la segunda neurona de la capa oculta.

 
¿Los pesos están corregidos por el error calculado, o todavía no?
 

No.

En primer lugar, calculamos la microcorrección para cada peso: dw=in*din - regla delta - multiplicamos la señal de entrada por el error aplicado a una entrada concreta. Luego lo resumimos en un sumador separado para cada peso sobre todas las muestras del vector de entrenamiento. Los pesos no se corrigen dentro de una iteración de la época de entrenamiento. Sólo se acumulan las microcorrecciones y sus cuadrados (en otro sumador).

P.D. He corregido el error en el post anterior. La derivada se encuentra de la siguiente manera: *(1-OUT2^2).

Razón de la queja: