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

 

Ahora he probado el EA y he detectado esto

2009.12.24 23:04:29 2009.09.04 14:00 n5_test EURUSD,H1: -1
2009.12.24 23:04:29 2009.09.04 14:00 n5_test EURUSD,H1: -1
2009.12.24 23:04:29 2009.09.04 14:00 n5_test EURUSD,H1: -1
2009.12.24 23:04:28 2009.09.04 13:00 n5_test EURUSD,H1: 1024
2009.12.24 23:04:27 2009.09.04 12:00 n5_test EURUSD,H1: 1023
2009.12.24 23:04:26 2009.09.04 11:00 n5_test EURUSD,H1: 1022


Estos números son los que devuelve el código:

a = f2M_create_standard (nn_layer,nn_input,nn_hidden1,nn_hidden2,nn_output);
Print(a);

El ID de la cuadrícula aumenta así a 1024 y entonces el sistema se niega a crear una nueva cuadrícula

La función f2M_destroy(ann[i]) no destruye ninguna cuadrícula. Este es el supuesto...

 
Kharin писал(а) >>

Sin embargo, la función f2M_destroy(ann[i]) no destruye ninguna malla. Esa es la suposición...

Alexander, ¿has probado f2M_destroy_all_anns();

¿Tal vez haya una diferencia en el rendimiento?

 

Sí, lo he probado ahora, parece que se ha localizado un problema...

I. - Puse static int AnnsNumber = 1027 en EA;

- He borrado todo de la carpeta ANN y he limpiado el registro.

- Puedo ver en el registro que se crean redes con índices de 7 a 1024.

- Las redes se guardan en archivos con números desde .1017.net hasta .0.net.

He repetido esta secuencia varias veces y nada cambia.

Adjunto el registro de la primera variante.

.

===========================

II. Inserté f2M_destroy_all_anns(); al principio de init(); y la situación cambió cardinalmente a mejor, sólo apareció un fallo al final

22:44:41 2008.07.31 23:59 FANN-EA_tmp USDJPY,M5: f2M_save(1, E:|ANN\USDJPY-870.1.net) devuelve: 0
22:44:41 2008.07.31 23:59 FANN-EA_tmp USDJPY,M5: f2M_destroy(1) devuelve: 0
22:44:41 2008.07.31 23:59 FANN-EA_tmp USDJPY,M5: f2M_save(0, E:|ANN\USDJPY-870.0.net) devuelve: -1
22:44:41 2008.07.31 23:59 FANN-EA_tmp USDJPY,M5: f2M_destroy(0) devuelve: -1

La cuadrícula cero no se guardó, mientras que 1024.net sí. Pero eso son las pequeñas cosas )))

Archivos adjuntos:
fanneea_tmp.zip  18 kb
 
Dali писал(а) >>

Alguien ha descomentado todas las opciones. En el código del CVS no hay ningún error de este tipo.

Pregunta: ¿Quién ha desplegado FANN2MQL?

¿Por instalador? ¿A mano desde el sitio oficial? ¿Por algún otro medio?

¿Quizás todos somos víctimas de una conspiración anti red? )

 
Henry_White писал(а) >>

Yo también voy a añadir a la lista de rarezas de FANN...

En aras de la experimentación, se decidió entrenar un comité de 46 redes de dimensión 30/N/N/1 por fuerza bruta (es decir, en cada barra: ~300k).

Por favor, aclárese. ¿Cada una de las 46 redes tiene diferentes salidas?

¿Cuál es la gama de escalas?

Si es posible, adjunte un perfil de una cuadrícula del comité.

 
Kharin >> :

Ahora he probado el EA y he detectado esto

2009.12.24 23:04:29 2009.09.04 14:00 n5_test EURUSD,H1: -1
2009.12.24 23:04:29 2009.09.04 14:00 n5_test EURUSD,H1: -1
2009.12.24 23:04:29 2009.09.04 14:00 n5_test EURUSD,H1: -1
2009.12.24 23:04:28 2009.09.04 13:00 n5_test EURUSD,H1: 1024
2009.12.24 23:04:27 2009.09.04 12:00 n5_test EURUSD,H1: 1023
2009.12.24 23:04:26 2009.09.04 11:00 n5_test EURUSD,H1: 1022


Estos números son los que devuelve el código:

a = f2M_create_standard (nn_layer,nn_input,nn_hidden1,nn_hidden2,nn_output);
Print(a);

El ID de la red aumenta así a 1024 y entonces el sistema se niega a crear una nueva red

La función f2M_destroy(ann[i]) no destruye ninguna cuadrícula. Esto es una suposición...

Así que se define en la propia biblioteca :


#ifdef FANN2MQL_EXPORTS
#define FANN2MQL_API __declspec(dllexport)
#else
#define FANN2MQL_API __declspec(dllimport)
#endif

/* maximum number of concurrently handled networks */
#define ANNMAX	1024

....................................................


/* array of FANN network structures */
extern struct fann *_fanns[ ANNMAX];
/* array of output values of networks */
extern double* _outputs[ ANNMAX];
/* index to last allocated network */
extern int _ann;
 
Kharin >> :


La función f2M_destroy(ann[i]) no destruye ninguna red. Aquí está tal suposición...

La función en sí misma :


DLLFUNC int __stdcall f2M_destroy(int ann)
{
	int i, last_null=_ann-1;

	/* this network is not allocated */
	if ( ann<0 || ann>_ann || _fanns[ ann]==NULL) return (-1);

	/* destroy */
	fann_destroy(_fanns[ ann]);

	/* clear the pointers */
	_fanns[ ann]=NULL;
	_outputs[ ann]=NULL;

	/* let reuse the handlers if last */
	if ( ann==_ann) {
		_ann--;

		/* look if we can recover any more handlers */
		for ( i=_ann; i>-1; i--) {
			if (_fanns[ i]==NULL) {
				_ann--;
			} else {
				break;
			}
		}
	}

	return 0;
}

La memoria se libera.

FANN_EXTERNAL void FANN_API fann_destroy(struct fann * ann)
{
	if( ann == NULL)
		return;
	fann_safe_free( ann-> weights);
	fann_safe_free( ann-> connections);
	fann_safe_free( ann-> first_layer-> first_neuron);
	fann_safe_free( ann-> first_layer);
	fann_safe_free( ann-> output);
	fann_safe_free( ann-> train_errors);
	fann_safe_free( ann-> train_slopes);
	fann_safe_free( ann-> prev_train_slopes);
	fann_safe_free( ann-> prev_steps);
	fann_safe_free( ann-> prev_weights_deltas);
	fann_safe_free( ann-> errstr);
	fann_safe_free( ann-> cascade_activation_functions);
	fann_safe_free( ann-> cascade_activation_steepnesses);
	fann_safe_free( ann);
}
#define fann_safe_free(x) {if(x) { free(x); x = NULL; }}

Buena suerte.

El problema puede surgir si se destruyen las redes en orden aleatorio o del primero al último. Hay que destruir las redes de la última a la última, es decir, en orden inverso al de su creación.

 
VladislavVG писал(а) >>

El problema puede surgir si se destruyen las redes al azar o del primero al último. Debe ser de la última a la última, es decir, en orden inverso al de la creación de las redes.

Permítanme añadir. O en caso de accidente terminal. Pero parece que se ha encontrado la solución.

La cuestión es diferente. Vladislav, creo que lees el código C++ sin "intermediarios".

¿Podría comentar el problema de las respuestas idénticas de la comisión de rejilla y la correcta inicialización de los valores de los pesos? (detallado aquí y más registros, y aquí una pregunta sobre los pesos)

 

lasso y VladislavVG

Muchas gracias

 
lasso >> :

Por favor, aclárese. ¿Son diferentes los resultados de cada una de las 46 redes?

¿Cuál es el rango de tamaño de las pesas?

Si es posible, adjunte un perfil de una cuadrícula del comité.

Sí. Las entradas son diferentes para cada cuadrícula, aunque esto no es crucial. Puede tomar una señal estándar, por ejemplo, el mismo RSI y una rejilla, y seguir obteniendo valores negativos en bruteforce para cualquier entrada.

Inicialización de los pesos -1, 1.

Sobre el perfil... ¿Se refiere al archivo resultante de la red entrenada?