Uzmanlar için soru - sayfa 3

 
Chris_Brown писал(а) >>

Ve eğer iki boyutlu bir dizi, 4'e 9'luk bir matris varsa ve her elemana 0,1 değeri atanırsa, bunun gibi bir şey mi olacak?

Talex'in size doğru bir şekilde belirttiği gibi, ArrayInitialize işlevini kullanarak dizileri başlatabilirsiniz (ve yapmalısınız).

 

Yardım!

NN öğrenme algoritmasının (bir öğretmenle) nasıl çalıştığını anlayamıyorum.

Örneğin, özellikle Ulusal Meclisimi alacağım (Pliz beni fazla azarlama, bu işte biraz yeniyim)

Bir NN öğrenme algoritmasının derlenmesiyle ilgili yardım


 //Размеры матрицы
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 ) ; }
//+------------------------------------------------------------------+
 

Ve ayrıca hiperbolik tanjant pahasına, doğru bir şekilde değerlendiriliyor mu?


 return ( ( MathExp ( A * x ) - MathExp ( - A * x ) ) / ( MathExp ( A * x ) + MathExp ( - A * x ) ) ) ;
 
Bir dizinin aralığını dinamik olarak ayarlamanın bir yolu var mı?
 
Chris_Brown >> :

Ve ayrıca hiperbolik tanjant pahasına, doğru bir şekilde değerlendiriliyor mu?

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


Bu arada, e^x işlevi hızlı görünmüyor.

Yani böylesi daha iyi:

 double var = A * x ;

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

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

Daha hızlı olmalı.

Chris_Brown >> :
Bir dizinin aralığını dinamik olarak ayarlamanın bir yolu var mı?

Değer alanı? -1'den 1'e kadardır. Eğer doğru anladıysam:

double ScaledTanh = Scale*tanh - Shift;
 

Değer alanı? -1'den 1'e kadardır. Eğer doğru anladıysam:

double ScaledTanh = Scale*tanh - Shift;

Numara. Ben başka bir şeyden bahsediyorum.

Standart dizi bildirimi :

int Mas[50]; // Burada dizi 0 ile 49 arasında ayarlanır


Ve dinamik olarak demek istedim, yani bazı hesaplamalarla bu aralığı değiştirin

 
ArrayResize () - Bir diziyi yeniden boyutlandırır.
 
Mathemat >> :
ArrayResize() - Bir diziyi yeniden boyutlandırır.

Ah, işte bir örnek:

çift W[3][4];

ArrayResize(W,2)


Sonuç olarak, 3'ü 2'ye değiştireceğiz, ancak ikinciyi nasıl değiştireceğiz? 4'ten 6'ya kadar diyelim

--------

Başka bir fikrim vardı: (Örneğin)

#define Giriş 4 //Giriş katmanındaki nöron sayısı
#define Out 1 //Çıktı katmanındaki nöron sayısı
double W[Giriş][Çıkış+1];//Ağırlık matrisi

ancak burada Out eklenemez bir hata oluşur 1

 

Hepinize iyi günler.

Konuyla ilgili soru değil. Lütfen. söylemek -

PDF metni Word'e nasıl çevrilir?

(Dosya büyüktür, - "Alacakaranlık", D.Glukhovsky 65 mb)

 
rid писал(а) >>

Hepinize iyi günler.

Konuyla ilgili soru değil. Lütfen. söylemek -

PDF metni Word'e nasıl çevrilir?

(Dosya büyüktür, - "Alacakaranlık", D.Glukhovsky 65 mb)

Genelde FineReader'da tanırım ve Word'de damıtırım. Başka seçenekler olsa da.

Ama soru kesinlikle konu dışı.