Una biblioteca rápida y gratuita para MT4, para deleite de los neuralnetworkers - página 9

 
Se trata de una comisión de 16 rejillas, puedes mirar los archivos que se crean.
 
Henry_White >> :

Si tenemos una rejilla con una neurona de salida, ¿cómo conseguimos 16 salidas? ¿O es un comité de 16 redes?

Lo es.

 

Hola a todos.

Llevo dos noches trabajando en este trozo de código.

void ann_prepare_input () {
    int i;
    double res = 0;
	 for( i = 0; i < AnnInputs; i++) {
      res = (iRSI(Symbol(), 0, 30, PRICE_OPEN, i) - 50.0) / 50.0; 
      if (MathAbs( res) > 1) {
         if ( res > 0) {
            InputVector[ i] = 1.0;            
         } else {
            InputVector[ i] = -1.0;            
         }
      } else {
         InputVector[ i] = res;            
      }
    }
}

No entiendo qué sentido tiene

if (MathAbs( res) > 1) {
         if ( res > 0) {
            InputVector[ i] = 1.0;            
         } else {
            InputVector[ i] = -1.0;            
         }
      } else {
         InputVector[ i] = res;            
      }

si el valor de res no puede ser mayor que uno.

Por favor, explique este punto, si no es un secreto, por supuesto.

 
alex_r >> :

Hola a todos.

He estado sentado toda la noche hurgando en un trozo de código

No entiendo qué sentido tiene

si el valor de res no puede ser mayor que uno.

Por favor, explique este punto si no es un secreto.

Los valores normalizados (1;-1) deben introducirse en la entrada del NS. De lo contrario, la formación NS puede conducir a resultados indefinidos.

 

bien, cómo se calcula la res

condición

(MathAbs(res) > 1)
nunca se cumplirá y la entrada será
res = (iRSI(Symbol(), 0, 30, PRICE_OPEN, i) - 50.0) / 50.0
y aquí, en el 99,99% de los casos, naturalmente obtendrá todo menos 1 y -1.
si es así
for( i = 0; i < AnnInputs; i++) {
      res = (iRSI(Symbol(), 0, 30, PRICE_OPEN, i) - 50.0) / 50.0; 

         if ( res > 0) {                 
            InputVector[ i] = 1.0;            
         } else {
            InputVector[ i] = -1.0;            
         }        

    }

entonces sólo 1 y -1

¿o me equivoco?

 
alex_r >> :

>> ¿o me equivoco?

No es así. Aquí todo funciona correctamente. Deberías estudiar el código más detenidamente. Es muy sencillo y obvio. No entiendo el sentido de tu "//": "mata" el significado por completo.

iRSI da básicamente valores de 0 a 100 con raros valores atípicos fuera del rango (por eso es (MathAbs(res) > 1) ), así que res estará en el 99,9% de los casos entre 1 y -1, mientras que InputVector estará dentro del 100%.

Si esperas un desglose de cada operador, no creo que nadie aquí tenga la capacidad de dar lecciones de programación. Y para esta sección será offtopic. Quizás con esto deberías ir a otra sección del foro o mandarme un mensaje.

PS. No "comentes" el código de otro (mejor comentarlo). Puede inducir a error a los demás y es un mal tono, en mi opinión. Si no estás de acuerdo con el autor, escribe tu variante.

 

Se ha eliminado lo comentado.

Ahora me explico, a res>0, aquí 0 corresponde al nivel 50 del indicador RSI, le asignamos 1, de lo contrario le asignamos -1

¿Qué no está claro? Un mínimo de código y nada más.

Tal y como está escrito en el código fuente, la condición principal de la normalización de los datos NO se cumple.

Lo único es filtrar otro cero, pero en este caso no es tan importante.

 
Su variante dará -1 o 1. ¿Y para qué sirve todo esto? ¿Y cómo vas a formar una red con esto? O más bien, ¿por qué? ¿Cuál es la utilidad de esta "binaridad" de los estados? ¿Cómo se construye un patrón a partir de esto para entrenar la red?
 
Henry_White >> :

Los valores normalizados (1;-1) deben introducirse en la entrada NS. De lo contrario, el entrenamiento de la SN puede conducir a resultados inciertos.

Tal vez este post te haya confundido. Aquí me refería a la gama, no a los estados binarios.

 
alex_r >> :

Tal como está escrito en el código fuente, la condición principal para la normalización de los datos NO se cumple.

Te equivocas porque las entradas de la rejilla (capa 1) son sigmoides ajustadas al rango: -1;1. Por lo tanto, cualquier valor de las entradas en el rango de -1 a 1 es una condición necesaria y suficiente para la normalización.


Lo que se intenta construir es sustituir la función sigmoidea por una función personalizada Signum(input) que subestima la discreción de los datos de entrada y crea situaciones en las que el conjunto de entrenamiento contiene un gran número de datos mutuamente contradictorios.

Razón de la queja: