Sinir ağları, bunlara nasıl hakim olunur, nereden başlamalı? - sayfa 17

 
Andrey4-min писал(а) >>

Örneğinizde, üç satırda da w1 var, böyle mi olmalı?

Hayır, yanılmışım. Affınıza sığınırım.

w0'ın hangi işlevi yerine getireceğini anlamaya çalışıyorum ve bunun tarihe bir adım gibi olduğunu varsaydım, peki, döngülerde olduğu gibi, değilse, daha ayrıntılı olarak açıklayın ...

Bir evin çatısına çivilenmiş bir tahtanın yüzey dokusunu düşünmeniz gerektiğini düşünün. Ne yapacaksın? Bu doğru, çatıya tırmanıyorsunuz ve dikkatlice, yakın mesafede her şeyi düşünün. Millet Meclisimize böyle bir görev verilirse, görevi sadece kendisine ait olan sorumlulukla tamamlayacak, çatının altına inmeyecek, bu kurulun çatısında olduğu tüm evle birlikte tahtayı inceleyecektir. yer almaktadır!

Burada, NN'nin gereksiz çalışmasını (ve eğitim, süreç çok kaynak yoğundur) dışlamak için, sabit bir kayma ile "ekstra" bir girdi sunuyoruz. Şimdi bakın: Millet Meclisi, öğrenme sürecinde, bu girdiye gerekli ağırlığı kendisi seçecektir (+/-1 veya başka), bu, bulunduğunuz tahtaya tırmanmak için eve bir merdiven koymakla eşdeğerdir. meraklı! Şimdi, Ulusal Meclis, gereksiz bir bilgi dağını kürekle kürekle kürek çekmeyecek, ancak basit bir hareketle, bu girişin yardımıyla, daha rahat öğrenme için uygun (anlayışı içinde) bir pozisyon alacaktır.

 
int    w0 = 1 ;
double w1 = ( High [ 1 ] - Low [ 1 ] ) / Point * ( Close [ 1 ] - Open [ 1 ] ) / Point ;
double w2 = ( High [ 2 ] - Low [ 2 ] ) / Point * ( Close [ 2 ] - Open [ 2 ] ) / Point ;
double w3 = ( High [ 3 ] - Low [ 3 ] ) / Point * ( Close [ 3 ] - Open [ 3 ] ) / Point ;
double w4 = ( High [ 4 ] - Low [ 4 ] ) / Point * ( Close [ 4 ] - Open [ 4 ] ) / Point ;
double w5 = ( High [ 5 ] - Low [ 5 ] ) / Point * ( Close [ 5 ] - Open [ 5 ] ) / Point ;
double w6 = ( High [ 0 ] - Low [ 0 ] ) / Point * ( Close [ 0 ] - Open [ 0 ] ) / Point ;
1 numaralı çubuğun sonuçlarına göre girersek, o zaman
w6 = ( High [ 0 ] - Low [ 0 ] ) / Point * ( Close [ 0 ] - Open [ 0 ] ) / Point ;

anlaşmanın açılmasından sonra oluşacaktır, yani bu giriş (w6) açık anlaşmanın kalitesini hiçbir şekilde etkileyemez.

Doğru anladıysam, önceki beş çubuğun (w1, w2, w3, w4, w5) analizine dayalı olarak bir anlaşma açıldıktan sonra fiyatın hangi yönde hareket ettiğini anlamak için w6 tanıtıldı?

 

Beş şekillendirilmiş çubuğun analizinin sonuçlarına dayanarak giriyoruz. Bu nedenle, sıfır çubuğu giriş olarak kullanılmayacaktır.

Bu şekilde düzeltin:

double w0 = 1. ;
double w1 = ( High [ 1 ] - Low [ 1 ] ) / Point * ( Close [ 1 ] - Open [ 1 ] ) / Point ;
double w2 = ( High [ 2 ] - Low [ 2 ] ) / Point * ( Close [ 2 ] - Open [ 2 ] ) / Point ;
double w3 = ( High [ 3 ] - Low [ 3 ] ) / Point * ( Close [ 3 ] - Open [ 3 ] ) / Point ;
double w4 = ( High [ 4 ] - Low [ 4 ] ) / Point * ( Close [ 4 ] - Open [ 4 ] ) / Point ;
double w5 = ( High [ 5 ] - Low [ 5] ) / Point * ( Close [ 5 ] - Open [ 5 ] ) / Point ;

High-Low - HL serisi ve Close-Open - CO serisi için normalizasyon katsayılarını tanıtalım. Bunları, örneğin 100 gibi bir ortalama alma penceresi ile karşılık gelen artışların standart sapması olarak tanımlarız.

double HL=0.;

double CO =0.;

for(i=0;i<100;i++) {

HL = HL +( High [i ] - Low [i ] )*( High [i ] - Low [i ] ) ;

CO= CO + ( Close [i ] - Open [i ] )* ( Close [i ] - Open [i ] ) ;

}

HL =MathSqrt(HL/100);

CO =MathSqrt( CO /100);

Normalleştirme işlevi yürütüyoruz (+/-1 segmentindeki tüm sayısal ekseni görüntüler):

double th(double x)
{
if(MathAbs(x)<100.)S=(MathExp(x)-MathExp(-x))/(MathExp(x)+MathExp(-x));
else S=MathAbs(x)/x;
return(S);
}

Daha sonra NN için normalleştirilmiş girdiler aşağıdaki gibi hesaplanacaktır:

double d0 = 1. ;
double d1 =th( ( High [ 1 ] - Low [ 1 ] ) /HL * ( Close [ 1 ] - Open [ 1 ] ) / CO) ;
double d2 = th( ( High [ 2 ] - Low [ 2 ] ) / HL * ( Close [ 2 ] - Open [ 2 ] ) / CO) ;
double d3 = th( ( High [ 3 ] - Low [ 3 ] ) / HL * ( Close [ 3 ] - Open [ 3 ] ) / CO) ;
double d4 = th( ( High [ 4 ] - Low [ 4 ] ) / HL * ( Close [ 4 ] - Open [ 4 ] ) / CO) ;
double d5 = th( ( High [ 5 ] - Low [ 5] ) / HL * ( Close [ 5 ] - Open [ 5 ] ) / CO) ;

Ve ilerisi. w1...w5 Ulusal Meclis'in girdisi değildir, bunlar, iyileştirme sürecinde ayarlanan ağırlıklardır. Giriş, d1, d2... d5 olarak belirtilecektir.
 

giriş normalizasyonu = puan olarak şamdan

 double a ;
int CandleMax = 20 , CandleMin = - 20 , Diapazon ;
Diapazon = CandleMax - CandleMin ;

a = ( Close [ i ] - Open [ i ] ) / Point ;
if ( a > CandleMax ) a = CandleMax ;
if ( a < CandleMin ) a = CandleMin ;
a = ( a - CandleMin ) / Diapazon ;
P.S. древний вариант
 
Korey , "ince" normalleştirmeyi kullanacağız (+/-1 segmenti eşit olarak doldurulduğunda). Bu temel bir noktadır.
 

Neutron, böyle ayrıntılı bir açıklama için tekrar teşekkürler.

Muhtemelen az önce yazdıklarınızla 60 dakika alacağım. anlayın, bu yüzden bir saat içinde bu konuya bakmak zor değilse.

Ayrıca size neroseti önceden yazılmış bir danışmana vidalamakla ilgili bir önerim var, sizinle nasıl iletişim kuracağınızla ilgileniyorsanız, size danışman algoritmasının bir tanımını ve neroset için katsayıların bir tanımını içeren grafikler gönderebilirim. .

 

Dürüst olmak gerekirse, özel iletişim hayranı değilim. Temel kısıtlamalar yoksa, burada iletişim kurmak daha iyidir. Yine de, bu konuya olan ilgimi kaybedebilirim (tıpkı böyle, aniden), bu yüzden zorunlu bakımı için yükümlülükler üstlenmiyorum :-)

Anlaştık mı?

 
Neutron писал(а) >>
Korey , "ince" normalleştirmeyi kullanacağız (+/-1 segmenti eşit olarak doldurulduğunda). Bu temel bir noktadır.

bu da eşit olarak doldurulur, ancak kenarlarda kıvrım yoktur, yani. eski sürüm, bir segmentte tam bir eşleme değildir

 
Korey писал(а) >>

bu da eşit olarak doldurulur, ancak kenarlarda kıvrım yoktur, yani. eski sürüm, bir segmentte tam bir eşleme değildir

Evet, ama her şeye aynı anda ihtiyacımız var!

 
Neutron >> :

Dürüst olmak gerekirse, özel iletişim hayranı değilim. Temel kısıtlamalar yoksa, burada iletişim kurmak daha iyidir. Yine de, bu konuya olan ilgimi kaybedebilirim (tıpkı böyle, aniden), bu yüzden zorunlu bakımı için yükümlülükler üstlenmiyorum :-)

Anlaştık mı?

Anlaştık mı.

 //+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init ( )
  {
//----
   
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit ( )
  {
//----
   
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start ( )
  {
//----
//Введём нормировочные коэффициенты для ряда High-Low - HL и для ряда Close-Open - CO. 
//Определим их как стандартное отклонение от соответствующих приращений с окном усреднения, например 100.
double HL = 0 . ;

double CO = 0 . ;

for ( int i = 0 ; i < 100 ; i + + ) {

HL = HL + ( High [ i ] - Low [ i ] ) * ( High [ i ] - Low [ i ] ) ; //Эти значения умножаются друг на друга, 
                                             //чтобы в случае если значение будет отрицательным
CO = CO + ( Close [ i ] - Open [ i ] ) * ( Close [ i ] - Open [ i ] ) ; //при умножении оно стало положительным?

}
HL = MathSqrt ( HL / 100 ) ; //Получилось среднее значение диапазона 100 последних баров
CO = MathSqrt ( CO / 100 ) ; //Получилось среднее значение диапазона между open b close 100 последних баров

//Ведём нормализующую функцию (отображает всю числовую ось в отрезок +/-1):
double th ( double x ) ; // что значит эта строчка?
{
if ( MathAbs ( x ) < 100 . ) S = ( MathExp ( x ) - MathExp ( - x ) ) / ( MathExp ( x ) + MathExp ( - x ) ) ;
else S = MathAbs ( x ) / x ;
return ( S ) ; // для чего вычислялась S? 
}

//Тогда нормализованные входа для НС будут считаться следующим образом:
double w0 = 1 . ; // что значит точка после числа?
double w1 = th ( ( High [ 1 ] - Low [ 1 ] ) / HL * ( Close [ 1 ] - Open [ 1 ] ) / CO ) ;
double w2 = th ( ( High [ 2 ] - Low [ 2 ] ) / HL * ( Close [ 2 ] - Open [ 2 ] ) / CO ) ;
double w3 = th ( ( High [ 3 ] - Low [ 3 ] ) / HL * ( Close [ 3 ] - Open [ 3 ] ) / CO ) ;
double w4 = th ( ( High [ 4 ] - Low [ 4 ] ) / HL * ( Close [ 4 ] - Open [ 4 ] ) / CO ) ;
double w5 = th ( ( High [ 5 ] - Low [ 5 ] ) / HL * ( Close [ 5 ] - Open [ 5 ] ) / CO ) ;

//И ещё. w1...w5 это не входа НС, это настраиваемые в процессе её обцчения веса. Входа будем обозначать как d1, d2... d5

   
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
Neden: