Uma biblioteca rápida e gratuita para o MT4, muito para o deleite de quem trabalha com redes neurais - página 14

 

Agora eu testei a EA e peguei este

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


Estes números são o que o código retorna:

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

O ID da grade aumenta assim para 1024 e então o sistema se recusa a criar uma nova grade

A função f2M_destroy(ann[i]) não destrói nenhuma grade! Esta é a suposição...

 
Kharin писал(а) >>

Entretanto, a função f2M_destroy(ann[i]) não destrói nenhuma malha! Essa é a suposição...

Alexander, você já tentou f2M_destroy_all_anns();

Talvez haja uma diferença no desempenho?

 

Sim, tentei agora, parece que um problema foi localizado...

I. - Eu coloco estático no AnnsNumber = 1027 na EA;

- Eu apaguei tudo da pasta ANN e limpei o registro.

- Posso ver pelo registro, são criadas redes com índices de 7 a 1024.

- As redes são salvas em arquivos com números de .1017.net a .0.net.

Eu repeti esta seqüência várias vezes e nada muda.

Estou anexando o registro da primeira variante.

.

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

II. Eu inseri f2M_destroy_all_anns(); no início do init(); e a situação mudou cardinalmente para melhor, apenas um mau funcionamento apareceu no final

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

A grade zero não economizou, enquanto 1024.net economizou. Mas essas são as pequenas coisas ))))

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

Alguém não comentou todas as opções. Não há tais erros no código da CVS.

Pergunta: Quem implantou o FANN2MQL como?

Por instalador? À mão a partir do site oficial? Por qualquer outro meio?

Talvez todos nós sejamos vítimas de uma conspiração anti-rede? )

 
Henry_White писал(а) >>

Também vou acrescentar à lista de probabilidades FANN...

Em nome da experiência, decidiu treinar um comitê de 46 redes de dimensão 30/N/N/1 por força bruta (ou seja, em cada barra: ~300k).

Por favor, esclareça. Cada uma das 46 redes tem resultados diferentes?

Qual é a gama de balanças?

Se possível, anexar um perfil de uma grade de comitês.

 
Kharin >> :

Agora eu testei a EA e peguei este

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


Estes números são o que o código retorna:

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

O ID da rede aumenta assim para 1024 e então o sistema se recusa a criar uma nova rede

A função f2M_destroy(ann[i]) não destrói nenhuma grade! Esta é uma suposição...

Portanto, é definido na própria 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 >> :


A função f2M_destroy(ann[i]) não destrói nenhuma rede! Esta é uma suposição...

A função em si :


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

A memória é liberada.

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

Boa sorte.

O problema pode surgir se você destruir redes em ordem aleatória ou do primeiro ao último. É preciso destruir as redes de último a último, ou seja, na ordem inversa de como elas foram criadas.

 
VladislavVG писал(а) >>

O problema pode surgir se você destruir as redes aleatoriamente ou do primeiro ao último. Deve ser de última a última - ou seja, na ordem inversa de como as redes foram criadas.

Deixe-me acrescentar. Ou em caso de queda do terminal. Mas a solução parece ter sido encontrada.

A questão é diferente. Vladislav, acho que você leu o código C++ sem "intermediários".

Você poderia comentar sobre o problema com respostas idênticas do comitê de grade e inicialização correta dos valores de pesos? (detalhado aqui e também registros, e aqui uma pergunta sobre pesos)

 

lasso e VladislavVG

Muito obrigado

 
lasso >> :

Por favor, esclareça. Os resultados de cada uma das 46 redes são diferentes?

Qual é a gama de tamanhos dos pesos?

Se possível, anexar um perfil de uma grade de comitês.

Sim. As entradas são diferentes para cada grade, embora isto não seja crucial. Você pode pegar um sinal padrão, por exemplo, o mesmo RSI e uma grade, e ainda obter valores negativos na força bruta para qualquer entrada.

Inicialização dos pesos -1, 1.

Sobre o perfil... Você se refere ao arquivo resultante da rede treinada?

Razão: