전문가를 위한 질문 - 페이지 3

 
Chris_Brown писал(а) >>

그리고 4 x 9 행렬인 2차원 배열이 있고 각 요소에 0.1의 값이 할당되면 다음과 같을까요?

Talex 가 올바르게 지적했듯이 ArrayInitialize 함수를 사용하여 배열을 초기화할 수 있습니다.

 

돕다!

NN 학습 알고리즘(선생님과 함께)이 어떻게 작동하는지 이해할 수 없습니다.

예를 들어, 나는 구체적으로 내 국회를 취할 것입니다 (Pliz는 나를 많이 꾸짖지 마십시오. 나는이 사업에 익숙하지 않습니다)

NN 학습 알고리즘 컴파일에 도움


 //Размеры матрицы
double W [ 4 ] [ 9 ] ; //Матрица весов размером 4 на 8
//	W					
//	W31	-0,52	-0,01	-0,08	0,35	          Выходной слой
//	W21	1,52	1,35	1,12	-1,38	
//	W22	7,05	4,75	3,25	1,45	
//	W23	7,36	4,42	3,90	2,26	          Скрытый слой 2   
//	W24	6,79	5,54	3,74	2,81	
//	W11	-4,65	13,06	7,00	4,67	0,07
//	W12	-3,25	11,92	2,66	5,98	2,41      Скрытый слой 1
//	W13	-3,31	8,93	3,32	5,57	4,20
//	W14	4,33	4,86	9,84	8,96	1,52 

//Функции активации нейронов
double NormDate ( double Date , int Type , int A ) {
   double x ;
   if ( Type = = 0 ) {      
      x = Date ;
       return ( MathTan ( MathExp ( A * x ) - MathExp ( - A * x ) / MathExp ( A * x ) + MathExp ( - A * x ) ) ) ; //гиперболический тангенс
       }
   if ( Type = = 1 ) {
      x = Date ;
       return ( 1 / ( 1 + MathExp ( - A * x ) ) ) ; // сигмоид
     }
 } 


//+------------------------------------------------------------------+
//| Многослойная нейронная сеть.                                     |
//| Параметры сети:                                                  |
//| Входные параметры подаются во входном массиве - X                |                                   
//| Веса задаются в весовой матрице - W                              |
//| Число скрытых слоёв = V                                          |
//|                                                                  |
//+------------------------------------------------------------------+
double neuronet1 ( double W [ ] [ ] , double X [ ] , int V ) {
int N = ArraySize ( X ) ;
int i , j , I ;
double sum = 0.0 ;
double Out [ 99 ] [ 99 ] ;
double summ = 0.0 ;
//Расчёты скрытых слоёв NC
for ( I = 0 ; I < = V - 1 ; I + + ) {
   for ( i = I * N ; i < = ( N - 1 + N * I ) ; i + + ) {
   for ( j = 0 ; j < = N - 1 ; j + + ) {
   if ( I = = 0 )
        summ + = ( W [ j ] [ i ] * X [ j ] ) ; else
        summ + = ( W [ j ] [ i ] * Out [ I - 1 ] [ j ] ) ;
}
Out [ I ] [ i - I * N ] = NormDate ( summ , 0 , 1 ) ;
summ = 0 ;
}
}
//Расчёт выходного слоя NC
for ( j = 0 ; j < = N - 1 ; j + + ) {
sum + = W [ j ] [ 8 ] * Out [ V - 1 ] [ j ] ;
}

sum = NormDate ( sum , 0 , 1 ) ;

return ( sum ) ;
}

int init ( ) {
//+------------------------------------------------------------------+
//|  Инциализирование весовой матрицы случайными числами             |
//+------------------------------------------------------------------+
MathSrand ( TimeLocal ( ) ) ;
double Dia = 1 ; //диапазон случайных чисел
ArrayInitialize ( W , ( MathRand ( ) / 32767.0 * Dia ) ) ;
}
int start ( ) {
//+------------------------------------------------------------------+
//| Создание массива с входными данными                              |
//+------------------------------------------------------------------+
double X [ 4 ] ;
 X [ 0 ] = 1.2447 ; // На первых порах пусть будут сами котировки 
 X [ 1 ] = 1.2458 ;
 X [ 2 ] = 1.2364 ;
 X [ 3 ] = 1.2377 ;
 
 double Out [ 1 ] ;
 Out [ 1 ] = 0.8 ; //  например в процессе обучения должно получиться значение больше 0.8
 
 //Пример обращения к функции нейросети
 Comment ( neuronet1 ( W , X , 2 ) ) ;
   return ( 0 ) ; }
//+------------------------------------------------------------------+
 

또한 쌍곡선 탄젠트를 희생하면서 올바르게 고려됩니까?


 return ( ( MathExp ( A * x ) - MathExp ( - A * x ) ) / ( MathExp ( A * x ) + MathExp ( - A * x ) ) ) ;
 
배열의 범위를 동적으로 설정하는 방법이 있습니까?
 
Chris_Brown >> :

또한 쌍곡선 탄젠트를 희생하면서 올바르게 고려됩니까?

tanh(x) = sinh(x)/cosh(x) = (e^x - e^-x)/(e^x + e^-x)


그건 그렇고, e^x 함수는 빠르지 않은 것 같습니다.

따라서 다음과 같이 하는 것이 좋습니다.

 double var = A * x ;

double expVar = MathExp ( var ) ;
double revExpVar = 1 / expVar ;

double tanh = ( expVar - revExpVar ) / ( expVar + revExpVar )

더 빨라야 합니다.

크리스_브라운 >> :
배열의 범위를 동적으로 설정하는 방법이 있습니까?

가치 영역? -1에서 1까지입니다. 내가 올바르게 이해한다면 :

double ScaledTanh = Scale*tanh - Shift;
 

가치 영역? -1에서 1까지입니다. 내가 올바르게 이해한다면 :

double ScaledTanh = Scale*tanh - Shift;

아니요. 나는 다른 것에 대해 이야기하고 있습니다.

표준 배열 선언 :

정수 마스[50]; // 여기서 배열은 0에서 49 사이의 범위로 설정됩니다.


그리고 나는 동적으로 의미했습니다. 즉, 일부 계산으로이 범위를 변경하십시오.

 
ArrayResize () - 배열의 크기를 조정합니다.
 
Mathemat >> :
ArrayResize() - 배열의 크기를 조정합니다.

아, 여기 예가 있습니다:

더블 W[3][4];

배열 크기 조정(W,2)


결과적으로 우리는 3을 2로 변경하지만 두 번째를 변경하는 방법은 무엇입니까? 4시부터 6시까지

--------

나는 다른 생각이 있었다: (예를 들어)

#define 입력 4 //입력 레이어의 뉴런 수
#define Out 1 //출력 레이어의 뉴런 수
double W[Input][Out+1];//가중 행렬

하지만 여기서 오류가 발생합니다. Out can not added 1

 

모두에게 좋은 하루.

주제에 관한 질문이 아닙니다. 제발. 말하다 -

PDF 텍스트를 Word로 번역하는 방법은 무엇입니까?

(파일이 큽니다, - "Twilight", D.Glukhovsky 65mb)

 
rid писал(а) >>

모두에게 좋은 하루.

주제에 관한 질문이 아닙니다. 제발. 말하다 -

PDF 텍스트를 Word로 번역하는 방법은 무엇입니까?

(파일이 큽니다. - "Twilight", D.Glukhovsky 65MB)

나는 보통 FineReader에서 인식하고 Word에서 증류합니다. 다른 옵션이 있을 수 있지만.

그러나 질문은 확실히 주제에서 벗어났습니다.