MT4를 위한 빠르고 무료 라이브러리인 신경망 전문가의 기쁨을 위해 - 페이지 14

 

이제 나는 어드바이저를 테스트하고 그런 순간을 포착했습니다.

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


코드가 반환하는 숫자는 다음과 같습니다.

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

따라서 네트워크 ID가 1024까지 올라가면 시스템이 새 메시 생성을 거부합니다.

동시에 f2M_destroy(ann[i]) 함수는 그리드를 파괴하지 않습니다! 여기에 가정이 있습니다 ...

 
Kharin писал(а) >>

동시에 f2M_destroy(ann[i]) 함수는 그리드를 파괴하지 않습니다! 여기에 가정이 있습니다 ...

Alexander, f2M_destroy_all_anns() 함수를 사용해 보셨습니까?

운동하는 데 차이가 있을 수 있습니까?

 

네, 지금 해봤는데 한 문제가 현지화 된 것 같습니다...

I. - 어드바이저에 static int AnnsNumber = 1027을 넣었습니다.

- ANN 폴더에서 모든 것을 삭제하고 로그를 지웁니다.

- 로그에 따르면 네트워크는 7에서 1024 사이의 인덱스로 생성됩니다.

- 메쉬는 .1017.net에서 .0.net까지의 번호를 가진 파일에 저장됩니다.

이 순서를 여러 번 반복했습니다. 아무 것도 변경되지 않았습니다.

첫 번째 로그를 첨부합니다.

.

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

Ⅱ. init() 시작 부분에 f2M_destroy_all_anns() 함수를 삽입했습니다. 그리고 그림은 관절의 끝에서만 더 나은 방향으로 극적으로 변경되었습니다.

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

제로 그리드는 보존되지 않았지만 1024.net은 보존되었습니다. 그러나 이것은 이미 사소한 일입니다)))

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

누군가가 모든 옵션을 설명했습니다. CVS 코드에는 이러한 오류가 없습니다.

질문: 누가 FANN2MQL을 어떻게 배포했습니까?

설치 프로그램? 사무실과 손입니다. 대지? 또 다른 방법?

어쩌면 우리 모두가 반네트워크 음모의 희생자일까요? )

 
Henry_White писал(а) >>

글쎄, 아마도 나는 이상한 보물에 FANN을 추가 할 것입니다 ...

실험을 위해 무차별 대입(즉, 각 막대: ~300,000)으로 차원 30/N/N/1의 네트워크 46개로 구성된 위원회를 훈련하기로 결정했습니다.

명확히 해주세요. 46개의 네트워크가 각각 다른 출력을 가지고 있습니까?

스케일 범위는 무엇입니까?

가능하면 한 위원회 그리드의 프로필을 첨부하십시오.

 
Kharin >> :

이제 내가 어드바이저를 테스트하고 그런 순간을 포착했습니다.

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


코드가 반환하는 숫자는 다음과 같습니다.

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

따라서 네트워크 ID가 1024까지 올라가면 시스템이 새 메시 생성을 거부합니다.

동시에 f2M_destroy(ann[i]) 함수는 그리드를 파괴하지 않습니다! 여기에 가정이 있습니다 ...

따라서 라이브러리 자체에 정의되어 있습니다.


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


동시에 f2M_destroy(ann[i]) 함수는 그리드를 파괴하지 않습니다! 여기에 가정이 있습니다 ...

기능 자체:


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

메모리가 해제됩니다.

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

행운을 빕니다.

ZY 어떤 순서로든 또는 처음부터 마지막까지 네트워크를 파괴하는 경우 문제가 발생할 수 있습니다. 마지막에서 이전까지, 즉 생성 방법의 역순으로 필요합니다.

 
VladislavVG писал(а) >>

ZY 어떤 순서로든 또는 처음부터 마지막까지 네트워크를 파괴하는 경우 문제가 발생할 수 있습니다. 마지막에서 이전까지, 즉 생성 방법의 역순으로 필요합니다.

추가하겠습니다. 또는 터미널 충돌의 경우. 그러나 해결책은 찾은 것 같습니다.

질문이 다릅니다. Vladislav, "중개자" 없이 C++ 코드를 읽는 것 같습니다.

동일한 네트워크 위원회 응답과 가중치의 올바른 초기화에 대한 문제에 대해 언급할 수 있습니까? ( 여기더 많은 로그 에 대해 자세히 설명되어 있지만 여기 에 가중치에 대한 질문이 있습니다)

 

올가미와 VladislavVG

정말 감사합니다

 
lasso >> :

명확히 해주세요. 46개의 네트워크 각각이 다른 출력을 가지고 있습니까?

스케일 범위는 무엇입니까?

가능하면 한 위원회 그리드의 프로필을 첨부하십시오.

네. 각 그리드에는 서로 다른 입력이 있지만 이것이 필수적인 것은 아닙니다. 예를 들어 동일한 RSI 및 하나의 그리드와 같은 표준 신호를 사용하여 모든 입력에서 무차별 대입에 대해 여전히 음수 값을 얻을 수 있습니다.

가중치의 초기 초기화는 -1, 1입니다.

프로필 정보 ... 훈련된 네트워크의 결과 파일을 의미합니까?