Bir mayın tarlasında pazar görgü kuralları veya görgü kuralları - sayfa 16

 
paralocus писал(а) >>

Neutron, kısa bir mola vereceğim. Her şeyi yeniden düşünmek ve en az bir nöron için kodlara çevirmek gerekiyor. Genel olarak, gün farklıdır ve sonra devam edeceğiz.

Size gerçekten minnettarım!

TAMAM.

 
Neutron >> :

TAMAM.

Merhaba Nötron. İşte, bir şey yaptım.

ORO algoritması için böyle küçük bir ızgarayı kör ettim:



Aslında, işte kılavuzun kodu (bu Neyro_test.mqh başlık dosyasıdır):

extern int neyrons = 3;
extern int in = 5;

double Data[3][5] = {0.0,0.0,0.0,0.0,1.0,
0.0,0.0,0.0,0.0,1.0,
0.0,0.0,0.0,0.0,1.0 };

double W[4][5] = {-0.786, 0.359,-0.186, 0.891, 0.238,
0.711,-0.923, 0.088, 0.417,-0.112,
-0.867,-0.229, 0.321, 0.921,-0.941,
0.995,-0.712, 0.012,-0.625, 0.0 };

//----------------------------
double OUT(int bar = 1)
{
int i;
double res = 0.0;

GetInd(bar);
res = W[3,0]*RSI_1() + W[3,1]*RSI_2() + W[3,2]*RSI_3() + W[3,3];

return(res);
}

double RSI_1()
{
int i;
double res = 0.0;

for(i = 0; i < 5; i++)
res += W[0,i] * Data[0,i];

return(th(res));
}

double RSI_2()
{
int i;
double res = 0.0;

for(i = 0; i < 5; i++)
res += W[1,i] * Data[0,i];

return(th(res));
}

double RSI_3()
{
int i;
double res = 0.0;

for(i = 0; i < 5; i++)
res += W[2,i] * Data[0,i];

return(th(res));
}

//----------

void OPO(double de)
{
int i;
for(i = 0; i < 4; i++)
W[3,i] += de;
}

//---------------------------------------------------------------------

void GetInd(int i)
{
int dt = 7,per = 14, prc = 0;
double ue_in = 0.02,kf = 3.0;

Data[0,0] = th((iRSI(NULL,0,per,prc,i)*ue_in - 1.0)*kf);
Data[0,1] = th((iRSI(NULL,0,per,prc,i+dt)*ue_in - 1.0)*kf);
Data[0,2] = th((iRSI(NULL,0,per,prc,i+dt*2)*ue_in - 1.0)*kf);
Data[0,3] = th((iRSI(NULL,0,per,prc,i+dt*3)*ue_in - 1.0)*kf);
}
//-------------------------------------------

double th(double x)
{
double sh,ch;
sh = MathExp(x) - MathExp(-x);
ch = MathExp(x) + MathExp(-x);
return(sh/ch);
}



İşte bunu boş bir Expert Advisor'da nasıl öğrenmeye çalıştım:

extern int cikl = 10;
static int prevtime = 0;


#include <Neyro_test.mqh>
//-----------------------------------
int init()
{
return(0);
}

int deinit()
{
return(0);
}
//-------------------------------------
int start()
{
static double test, control;

if(Time[0] == prevtime)
return(0);
prevtime = Time[0];

int pr = 14, pc = 0, i;
double in = 0.02, k = 3.0;


for(i = cikl; i > 2; i--)
{
test = OUT(i);
control = th((iRSI(NULL,0,pr,pc,i-1)*in - 1.0)*k);
OPO(test - control);
}

Comment("\r\n ВЕСА ВЫХОДНОГО НЕЙРОНА : ",W[3,0],", ",W[3,1],", ",W[3,2],", ",W[3,3]);
return(0);

}



Genel olarak, bu ızgara "seyyar satıcılık" yapar. Ağırlık katsayıları, 10 adımdan (çubuk) sonra zaten müstehcen bir şekilde artmaktadır. Uzun süre kodda bir hata aradım - kodun olması gerektiği gibi çalıştığı ortaya çıktı.

Onlar. gridin çıktısında elde edilen hatayı çıktı katmanının tüm ağırlık katsayılarına eklersek, bu katsayılar çok hızlı büyüme eğilimindedir.

Ölçek ölçeği başarısız... -:) Şimdiye kadar hatayı yalnızca çıktı katmanının ağırlıklarına genişletmeye çalıştım.

Birinci soru: Neyi yanlış yaptım?

Soru iki:

Burada, ızgara çıkışında başarılı bir alım / satım olasılığı veya bambu içme önerisi almak istiyorum. Ve bu ızgara, n+1 çubuklarda RSI değerini tahmin etmeyi öğreniyor...

Onunla ne yapabilirim?

 

ORO işlevinde ağırlıklar yanlış değiştirilmiş

teoriyi oku, en azından burada

 
maxfade >> :

ORO işlevinde ağırlıklar yanlış değiştirilmiş

teoriyi oku, en azından burada

Teşekkürler ama anlamadım

 

çıktı katmanındaki hata, e=OUT*(1-OUT)*(TEST-OUT) formülü kullanılarak hesaplanmalıdır (bu bir lojistik transfer fonksiyonu içindir, hiperbolik bir tanjant için formül biraz farklı olacaktır, ancak ayrıca çok karmaşık değil)

nöronun ağırlığı w+=nju*e*OUT formülüne göre değiştirilmelidir, burada nju öğrenme adımıdır

adım çok büyükse - ağ kararsız olacak ve ağırlıkların değerinde sonsuz bir artış olacaktır (sizin durumunuzda olduğu gibi, diğer tüm çarpanlar olmadan (TEST-OUT) kullanırsınız)

çok küçükse - ağın öğrenmesi çok uzun sürer ve yerel minimuma düşebilir

 
maxfade >> :

çıktı katmanındaki hata, e=OUT*(1-OUT)*(TEST-OUT) formülü kullanılarak hesaplanmalıdır (bu bir lojistik transfer fonksiyonu içindir, hiperbolik bir tanjant için formül biraz farklı olacaktır, ancak ayrıca çok karmaşık değil)

nöronun ağırlığı w+=nju*e*OUT formülüne göre değiştirilmelidir, burada nju öğrenme adımıdır

adım çok büyükse - ağ kararsız olacak ve ağırlıkların değerinde sonsuz bir artış olacaktır (sizin durumunuzda olduğu gibi, diğer tüm çarpanlar olmadan (TEST-OUT) kullanırsınız)

çok küçükse - ağın öğrenmesi çok uzun sürer ve yerel minimuma düşebilir


Teşekkürler, şimdi deneyeceğim

 
maxfade >> :

adım çok büyükse - ağ kararsız olacak ve ağırlıkların değerinde sonsuz bir artış olacaktır (sizin durumunuzda olduğu gibi, diğer tüm çarpanlar olmadan (TEST-OUT) kullanırsınız)

çok küçükse - ağın öğrenmesi çok uzun sürer ve yerel minimuma düşebilir


Biraz kafamı karıştıran şey, modifikasyon sonucunda terazinin "göreceli konumunun" değişmeden kalmasıdır. Bunun nedeni, değişiklik sonucunda tüm girdi ağırlıklarının aynı miktarda değişmesidir. Bu durumda, başlangıç ağırlık oranı rastgele ayarlanmıştır. Böyle mi olması gerekiyor?

 

Hey paralokus .

Hadi, sırayla. n -sample uzunluğunda bir eğitim vektörünüz var ve Ağın tüm ağırlıklarını düzeltmek için bir hata vektörü oluşturmamız gerekiyor. Sabit düzeyin ağırlıkları sayıldığında, vektörün uzunluğunun w ağırlıklarının sayısına eşit olacağı açıktır. Hata vektörü yalnızca birinci (ikinci, üçüncü vb.) eğitim döneminin sonunda oluşturulacaktır. Oluşum yöntemi aşağıdaki gibidir:

1. İlk antrenman adımında (her çağda n adet vardır) her ağırlık için ayrı bir hata oluşturuyoruz ve ağırlıkları düzeltmeyiz. Ardından, ikinci adımda, benzer bir düzeltme oluşturduktan sonra, onu bir öncekine ekleriz, vb. n kez. Her ağırlık için toplam düzeltmeyi (her terimin işaretini dikkate alarak) alırız. Şimdi, önemli bir nokta. Bu son düzeltme kullanılamaz - ağırlıklar aralığa girecektir! Düzeltme vektörünün normuna bölmek gerekir. Bunu yapmak için, her ağırlık için bir eğitim dönemi içindeki her düzeltmenin karelerinin toplamını ayrı ayrı hesaplamak gerekir. Bir sonraki dönemi bitirir bitirmez ( içinde n -döngü), her ağırlık için kareler toplamının karekökünü ayrı ayrı çıkarırız ve her düzeltmeyi kişisel olarak bu orana böleriz. Her ağırlığı ayarlıyoruz.

2. Eğitim hedeflerine (işaret veya genlik) bağlı olarak 10 ila 1000 bu tür eğitim dönemi olacaktır. Her şeyi aynı şekilde yapıyoruz. Önemli bir nokta: çağdan çağa geçerken, ağırlık düzeltme genliğinde monoton düşüşü kesinlikle izlemek gerekir. Bunu yapmak, Izgara'nın hata fonksiyonunun potansiyelinde daha derin ve daha derin bir minimum aramak için çok tembel olmaması için gereklidir. Basitçe uygulanır. Dönemin sonunda, ağırlık düzeltmesinden önce, düzelticiyi 1-j/N değeriyle çarpmak gerekir, burada N , eğitim dönemlerinin sayısıdır, j , mevcut dönem numarasıdır.

3. Eğitim sürecinde AĞ'ın bazı ağırlıklarının doygunluğunun kaçınılmaz etkisini önlemek için, ağırlıkların bir sonraki düzeltmesinden hemen sonra hiperbolik bir tanjant ile tüm ağırlıklar üzerinde hareket etmek gerekir. Bu prosedür açık değildir, ancak son derece etkilidir. Kullanılan FA'nın düzgünlüğü ve monotonluğu nedeniyle, tüm ağırlıklar her zaman +/-1 aralığında kalacaktır ve etkileme eyleminin kendisi kızda bir “histeriye” neden olmaz.

Her şey varken. Sindirin ve sorular sorun.

RSI'dan Al / Sat'a nasıl geçileceği sorusuna gelince, bu sizin için bir soru - sonuçta bu hamleyi kendiniz yaptınız. Örneğin, giriş olarak girdiğim şeyi tahmin ediyorum (ve tam olarak Al/Sat tahmin ediyorum). Bu nedenle, herhangi bir çelişki yoktur. Ve bu dairenin mutfak penceresinin önündeki arabanın rengini, keyfi bir dairede duvar kağıdının rengine göre tahmin etmeye çalışıyorsunuz...

 

Gönderi kaşındığından, uygulamanın ayrıntılarını hatırlayarak yanlışlıklar ortaya çıktı.

Koda baktım, yeni bir tahmine geçerken FA'nın ağırlıklar üzerindeki etkisini bir kez yaptığım ortaya çıktı, yani. her çağda değil, ancak gerekirse yeni veriler geldiğinde ağı yeniden eğitin.

Ve ilerisi. Ağırlık düzeltmesi, nöronun çıkışından FA'nın türevine ve sinyalin başladığı nöronun çıkışına (işaret dikkate alınarak genlik) kadar olan hatanın ürünüdür.

Doğrusal olmayan çıktıya sahip bir algılayıcı için şöyle görünür (örneğin):

Burada dönemler L indeksi ile numaralandırılmıştır. MathCad üzerinden özellikle gösteriyorum, daha net. In - giriş sayısı, x - giriş vektörü. Gerisi açık gibi görünüyor.

 
Neutron >> :

RSI'dan Al / Sat'a nasıl geçileceği sorusuna gelince, o zaman bu sizin için bir sorudur - sonuçta, bu hamleyi kendiniz yaptınız. Örneğin, girdi olarak girdiğim şeyi tahmin ediyorum (ve tam olarak Al/Sat tahmin ediyorum). Bu nedenle, bir çelişki yoktur. Ve bu dairenin mutfak penceresinin önündeki arabanın rengini, keyfi bir dairede duvar kağıdının rengine göre tahmin etmeye çalışıyorsunuz...

Merhaba Nötron.

Yazdıklarınızdan şimdi anladım. Sadece matematik büyük bir gıcırtı ile kafama tırmanıyor. Programlama biraz daha kolaydır. Ve duvar kağıdına gelince - kesinlikle haklısın - ama yine de aynı duvar kağıtları dışında, ancak farklı bir fabrikadan giriş ızgarasına ne dolduracağımı bilmiyorum (sonucun aynı olacağını düşünüyorum). Burada forumda bu makaleyi okudum ve sinir ağlarına olan ilgim onunla başladı. Ve bu makalede, bildiğiniz gibi, talihsiz bir algılayıcının girişinde, forumdan akıllı adamlar bir hindi AO'yu (veya AC - onları her zaman karıştırırım) itti ve izleyecek bir şey olması için onu böldüler. söz konusu türkiye'nin grafikleri boyunca bu algılayıcının girdilerini göndererek "kümelere" ( dt/dl ) dönüştürün. Bütün bunlara "SİNİR AĞI", hatta "geleneksel olmayan O... (hayır, bir şeyi yanlış yere koydum) DRİN OTOMASYONU İLE TİCARET YAPMAK" denir. Büyük paralı adamlar kürek çekiyor... test cihazında.

Pekala, tamam ... lirik bir arasözdü.

Bu makaleden ve buna benzer birkaç makaleden sonra (bağlantıları takip ederek), algılayıcıları her yönden denemeye başladım. Genel olarak, her şey o şarkıdaki gibidir:

Vanka bir bankta oturuyor, yaban turpuyla üç kopek dövüyor.

Üç ruble yapmak istiyor - Hiçbir şey çıkmıyor!

Ancak, onları ticarette kullanmak amacıyla şebeke dışı ürünlere olan ilgim bende kaldı ve hatta zamanla büyüdü. Henüz RSI kümelenmesinden daha iyi bir şey düşünemiyorum, şarap amcaları değil, “iki ucu keskin bir kılıç”. Onlar. Izgarayı girdiye neyi ve nasıl iteceğimi bilmek için, bu ızgaraların nasıl düzenlendiğini bilmem ve sadece bilmem değil, aynı zamanda yapabilmem gerekiyor. En azından bazı çok karmaşık olmayan formlarda, ancak gerçek hayatta istikrarlı çalışma için yeterli. Bu yüzden sana döndüm.


PS "Sen" olarak değiştirdiğim hiçbir şey yok mu? Yani bir şekilde duygulu.

Neden: