Una libreria rapida e gratuita per MT4, per la gioia dei neuralnetworkers - pagina 14

 

Ora ho testato l'EA e ho trovato questo

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


Questi numeri sono quelli che il codice restituisce:

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

L'ID della griglia aumenta così a 1024 e poi il sistema rifiuta di creare una nuova griglia

La funzione f2M_destroy(ann[i]) non distrugge nessuna griglia! Questo è il presupposto...

 
Kharin писал(а) >>

Tuttavia, la funzione f2M_destroy(ann[i]) non distrugge nessuna maglia! Questo è il presupposto...

Alexander, hai provato f2M_destroy_all_anns();

Forse ci sarà una differenza nelle prestazioni?

 

Sì, l'ho provato ora, sembra che un problema sia stato localizzato...

I. - Ho messo l'int statico AnnsNumber = 1027 in EA;

- Ho cancellato tutto dalla cartella ANN e ho pulito il registro.

- Vedo dal log che vengono create reti con indici da 7 a 1024.

- Le reti sono salvate in file con numeri da .1017.net a .0.net.

Ho ripetuto questa sequenza diverse volte e non cambia nulla.

Allego il log della prima versione.

.

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

II. Ho inserito f2M_destroy_all_anns(); all'inizio di init(); e la situazione è cambiata cardinalmente in meglio, solo un malfunzionamento è apparso alla fine

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

La griglia zero non ha salvato, mentre 1024.net sì. Ma sono le piccole cose )))

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

Qualcuno ha decommentato tutte le opzioni. Non ci sono questi errori nel codice del CVS.

Domanda: chi ha distribuito FANN2MQL come?

Per installatore? A mano dal sito ufficiale? Con altri mezzi?

Forse siamo tutti vittime di una cospirazione contro la rete? )

 
Henry_White писал(а) >>

Aggiungo anch'io alla lista delle stranezze del FANN...

A titolo di esperimento, abbiamo deciso di addestrare un comitato di 46 reti di dimensione 30/N/N/1 tramite bruteforcing (cioè su ogni barra: ~300k).

Si prega di chiarire. Ciascuna delle 46 reti ha uscite diverse?

Qual è la gamma di scale?

Se possibile, allega il profilo di una griglia di comitato.

 
Kharin >> :

Ora ho testato l'EA e ho trovato questo

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


Questi numeri sono quelli che il codice restituisce:

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

L'ID della rete aumenta così a 1024 e poi il sistema rifiuta di creare una nuova rete

La funzione f2M_destroy(ann[i]) non distrugge nessuna griglia! Questa è una supposizione...

Quindi è definito nella libreria stessa:


#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 funzione f2M_destroy(ann[i]) non distrugge nessuna rete! Ecco una tale ipotesi...

La funzione stessa:


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 viene rilasciata.

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; }}

Buona fortuna.

Il problema può sorgere se si distruggono le reti in ordine casuale o dal primo all'ultimo. Dovete distruggere le reti dall'ultima all'ultima, cioè in ordine inverso a come sono state create.

 
VladislavVG писал(а) >>

Il problema può sorgere se si distruggono le reti in modo casuale o dal primo all'ultimo. Dovrebbe essere dall'ultimo all'ultimo - cioè nell'ordine inverso di come sono state create le reti.

Permettetemi di aggiungere. O in caso di crash del terminale. Ma la soluzione sembra essere stata trovata.

La domanda è diversa. Vladislav, penso che tu legga il codice C++ senza "intermediari".

Potresti commentare il problema delle risposte identiche del comitato di griglia e la corretta inizializzazione dei valori dei pesi? (dettagliato qui e altri registri, e qui una domanda sui pesi)

 

lasso e VladislavVG

Grazie mille

 
lasso >> :

Si prega di chiarire. Gli output di ciascuna delle 46 reti sono diversi?

Qual è la gamma di dimensioni dei pesi?

Se possibile, allega il profilo di una griglia di comitato.

Sì. Gli input sono diversi per ogni griglia, anche se questo non è cruciale. Puoi prendere un segnale standard, per esempio lo stesso RSI e una griglia, e ottenere comunque valori negativi su bruteforce per qualsiasi input.

Inizializzazione iniziale dei pesi -1, 1.

A proposito del profilo... Intendi il file risultante della rete addestrata?