Eine schnelle und kostenlose Bibliothek für MT4, sehr zur Freude der Neuralnetworker - Seite 14

 

Ich habe den EA jetzt getestet und folgendes festgestellt

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


Diese Zahlen sind das, was der Code zurückgibt:

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

Die Netz-ID erhöht sich somit auf 1024 und das System weigert sich, ein neues Netz zu erstellen.

Die Funktion f2M_destroy(ann[i]) zerstört keine Raster! Dies ist die Annahme...

 
Kharin писал(а) >>

Die Funktion f2M_destroy(ann[i]) zerstört jedoch keine Maschen! Das ist die Vermutung...

Alexander, haben Sie f2M_destroy_all_anns() ausprobiert;

Vielleicht wird es einen Unterschied in der Leistung geben?

 

Ja, ich habe es jetzt versucht, es sieht so aus, als ob ein Problem lokalisiert wurde...

I. - Ich habe static int AnnsNumber = 1027 in EA;

- Ich habe alles aus dem ANN-Ordner gelöscht und das Protokoll bereinigt.

- Aus dem Protokoll kann ich ersehen, dass Netze mit Indizes von 7 bis 1024 erstellt werden.

- Netze werden in Dateien mit Nummern von .1017.net bis .0.net gespeichert.

Ich habe diese Sequenz mehrmals wiederholt, aber es hat sich nichts geändert.

Ich füge das Protokoll der ersten Variante bei.

.

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

II. Ich fügte f2M_destroy_all_anns(); am Anfang von init(); ein und die Situation änderte sich grundlegend zum Besseren, nur eine Fehlfunktion erschien am Ende

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

Das Nullraster wurde nicht gespeichert, 1024.net hingegen schon. Aber das sind die kleinen Dinge )))

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

Jemand hat alle Optionen auskommentiert. Der Code aus dem CVS enthält keine derartigen Fehler.

Frage: Wer hat FANN2MQL wie eingesetzt?

Durch den Installateur? Per Hand von der offiziellen Website? Mit anderen Mitteln?

Vielleicht sind wir alle Opfer einer Anti-Netz-Verschwörung? )

 
Henry_White писал(а) >>

Ich werde die Liste der FANN-Kuriositäten auch noch erweitern...

Zu Versuchszwecken wurde beschlossen, ein Komitee von 46 Netzen der Dimension 30/N/N/1 durch Brute-Forcing zu trainieren (d.h. für jeden Balken: ~300k).

Bitte klären Sie das. Hat jedes der 46 Netze unterschiedliche Ausgänge?

Wie groß ist die Bandbreite der Skalen?

Wenn möglich, fügen Sie ein Profil eines Ausschussrasters bei.

 
Kharin >> :

Ich habe den EA jetzt getestet und folgendes festgestellt

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


Diese Zahlen sind das, was der Code zurückgibt:

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

Die Netz-ID erhöht sich somit auf 1024 und das System weigert sich, ein neues Netz zu erstellen.

Die Funktion f2M_destroy(ann[i]) zerstört keine Raster! Dies ist eine Vermutung...

Sie ist also in der Bibliothek selbst definiert:


#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 >> :


Die Funktion f2M_destroy(ann[i]) zerstört keine Netze! Hier ist eine solche Annahme...

Die Funktion selbst :


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

Der Speicher wird freigegeben.

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

Viel Glück!

Das Problem kann entstehen, wenn Sie Netze in zufälliger Reihenfolge oder vom ersten bis zum letzten Netz zerstören. Sie müssen die Netze in umgekehrter Reihenfolge zerstören, d. h. in der Reihenfolge, in der sie erstellt wurden.

 
VladislavVG писал(а) >>

Das Problem kann entstehen, wenn Sie Netze wahllos oder vom ersten zum letzten zerstören. Die Reihenfolge sollte von der letzten zur letzten sein, d.h. in umgekehrter Reihenfolge, wie die Netze erstellt wurden.

Lassen Sie mich hinzufügen. Oder im Falle eines Terminalabsturzes. Aber die Lösung scheint gefunden zu sein.

Die Frage ist eine andere. Vladislav, ich glaube, Sie lesen C++-Code ohne "Vermittler".

Könnten Sie sich zu dem Problem der identischen Antworten des Netzausschusses und der korrekten Initialisierung der Gewichtungswerte äußern? (ausführlicher hier und weitere Protokolle, und hier eine Frage zu Gewichten)

 

lasso und VladislavVG

Herzlichen Dank

 
lasso >> :

Bitte klären Sie das. Sind die Ergebnisse der 46 Netze unterschiedlich?

Wie groß ist der Größenbereich der Gewichte?

Wenn möglich, fügen Sie ein Profil eines Ausschussrasters bei.

Ja. Die Eingaben sind für jedes Netz unterschiedlich, was aber nicht entscheidend ist. Sie können ein Standardsignal nehmen, z. B. den gleichen RSI und ein Raster, und trotzdem negative Werte bei Bruteforce für alle Eingaben erhalten.

Initiale Initialisierung der Gewichte -1, 1.

Über das Profil... Meinen Sie die Ergebnisdatei des trainierten Netzwerks?