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

 
이것은 16개의 그리드로 구성된 위원회이며 생성 중인 파일을 볼 수 있습니다.
 
Henry_White >> :

하나의 출력 뉴런이 있는 그리드가 있는데 왜 16개의 출력이 있습니까?!... 아니면 16개의 그리드로 구성된 위원회인가요?

그는

 

모두 제일 좋다!

나는 두 번째 밤에 앉아서 코드 조각을 붙인다

 void ann_prepare_input ( ) {
    int i ;
    double res = 0 ;
	 for ( i = 0 ; i < AnnInputs ; i + + ) {
      res = ( iRSI ( Symbol ( ) , 0 , 30 , PRICE_OPEN , i ) - 50.0 ) / 50.0 ; 
      if ( MathAbs ( res ) > 1 ) {
         if ( res > 0 ) {
            InputVector [ i ] = 1.0 ;            
         } else {
            InputVector [ i ] = - 1.0 ;            
         }
      } else {
         InputVector [ i ] = res ;            
      }
    }
}

무슨 뜻인지 이해가 안감

 if ( MathAbs ( res ) > 1 ) {
         if ( res > 0 ) {
            InputVector [ i ] = 1.0 ;            
         } else {
            InputVector [ i ] = - 1.0 ;            
         }
      } else {
         InputVector [ i ] = res ;            
      }

res의 값이 1보다 크면 그럴 수 없습니다.

물론 비밀이 아니라면 이 점을 설명해주세요.

 
alex_r >> :

모두 제일 좋다!

나는 두 번째 밤에 앉아서 코드 조각을 붙인다

무슨 뜻인지 이해가 안감

res의 값이 1보다 크면 그럴 수 없습니다.

물론 비밀이 아니라면 이 점을 설명해주세요.

정규화된 값(1;-1)은 NN 입력에 공급되어야 합니다. 그렇지 않으면 NN 훈련이 불확실한 결과를 초래할 수 있습니다.

 

음, 해상도는 어떻게 계산됩니까?

상태

(MathAbs(res) > 1)
실행되지 않으며 입력이 제공됩니다.
 res = ( iRSI ( Symbol ( ) , 0 , 30 , PRICE_OPEN , i ) - 50.0 ) / 50.0
그리고 여기 99.99%의 경우에 자연적으로 아무 것도 밝혀지지 않지만 1과 -1은 아닙니다.
그렇다면
 for ( i = 0 ; i < AnnInputs ; i + + ) {
      res = ( iRSI ( Symbol ( ) , 0 , 30 , PRICE_OPEN , i ) - 50.0 ) / 50.0 ; 

         if ( res > 0 ) {                 
            InputVector [ i ] = 1.0 ;            
         } else {
            InputVector [ i ] = - 1.0 ;            
         }        

    }

그러면 1과 -1만 있을 것입니다.

아니면 내가 틀렸어?

 
alex_r >> :

아니면 내가 틀렸어?

당신은 잘못. 모든 것이 바로 여기에서 작동합니다. 코드를 자세히 살펴봐야 합니다. 그것은 매우 간단하고 분명합니다. 나는 당신의 "//"의 의미를 이해하지 못했습니다 - 그들은 의미를 완전히 "죽입니다".

iRSI는 기본적으로 범위에서 드물게 벗어나는 0에서 100까지의 값을 제공합니다(그래서 비용이 드는 이유(MathAbs(res) > 1) ), 따라서 res는 99.9%의 경우에서 1과 -1의 경계에 놓이고, InputVector - 100%.

각 문장이 구문 분석되기를 기다리고 있다면 여기 있는 누구도 프로그래밍 수업을 할 기회가 없다고 생각합니다. 그리고 이 섹션에서는 주제에서 벗어날 것입니다. 아마도 이것은 포럼의 다른 섹션으로 보내거나 개인적으로 저에게 편지를 보내야 합니다.

추신. 다른 사람의 코드에 "주석"을 추가하면 안 됩니다(주석을 추가하는 것이 좋습니다). 이것은 다른 사람들을 오도하고 IMHO의 맛을 나쁘게 할 수 있습니다. 저자와 동의하지 않으면 자신의 버전을 작성하십시오.

 

주석이 제거되었습니다.

이제 res>0일 때 여기서 0은 RSI 표시기의 레벨 50에 해당하고 1을 할당하고 그렇지 않으면 -1을 할당합니다.

명확하지 않은 것은 무엇입니까? 최소 코드 및 그 이상.

소스 코드에 작성되어 있으므로 데이터 정규화의 주요 조건은 수행되지 않습니다.

유일한 것은 다른 0을 걸러내는 것이지만 이 경우에는 그렇게 중요하지 않습니다.

 
귀하의 옵션은 -1 또는 1의 값을 제공합니다. 그리고 왜이 모든 것입니까? 그리고 어떻게 네트워크를 훈련시킬 것인가? 또는 오히려, 무엇? 상태의 이 "이진성"의 유용성은 무엇입니까? 이것으로부터 네트워크 훈련 을 위한 패턴을 어떻게 구축합니까?
 
Henry_White >> :

정규화된 값(1;-1)은 NN 입력에 공급되어야 합니다. 그렇지 않으면 NN 훈련이 불확실한 결과를 초래할 수 있습니다.

아마도 이 게시물이 당신을 혼란스럽게 만들었을 것입니다 .. 여기서 나는 바이너리 상태가 아니라 범위를 의미했습니다.

 
alex_r >> :

소스 코드에 작성되어 있으므로 데이터 정규화의 주요 조건은 수행되지 않습니다.

당신이 틀렸어요. 그리드(첫 번째 레이어)의 입력에는 -1;1 범위로 조정된 시그모이드가 있습니다. 따라서 입력의 정규화를 위한 필요 충분 조건은 -1에서 1 사이의 값입니다.


당신이 만들려고 하는 것은 sigmoid 함수를 당신 자신의 개그로 바꾸는 것입니다. Signum(input)은 주각 아래에 있는 입력 데이터의 불연속성을 과소평가하고 이에 따라 훈련 샘플에 상당한 수의 상호 모순된 데이터가 포함되는 상황을 만듭니다.