fyords: Elbette bu başlıkta sinir ağlarının inceliklerinin tartışılmasına karşı değilim, ancak makale başlangıçta yeni başlayanlar için planlanmıştı. Bazı detayları atlıyor, çünkü bu detaylar acemi bir sinir ağı uzmanının kafasını karıştır abilir. Elbette, makale sinir ağlarını eğitmenin (uydurmanın) çeşitli yöntemlerini belirtmiyor, ancak ilk aşamada gerekli değil. Sinir ağlarının o kadar da zor olmadığını fark ederseniz, bu size geri dönüp "bu çok zor ve bana göre değil" demek için bir bahane vermez. Daha fazlasını biliyorsanız, bu harika, o zaman bu makale muhtemelen size göre değil.
Şimdiye kadar, yukarıda sorduğum ayrıntıların yokluğu, sıradan bir aptal olarak beni sersemletti. Makaleyi üç kez tekrar okudum, ancak gerekli cevapları sadece forumda buldum.
fyords: Şu anda ikinci bölüm çok katmanlı sinir ağları ile çalışmayı kapsayacak. İçeriği hakkında herhangi bir isteğiniz varsa - lütfen bunları kısaca yazın.
İlgilendiğim tek bir soru var: "harici" bir optimize edici kullanmadan kendi kendine öğrenebilen bir programın nasıl oluşturulacağı. Tabii bu aşamada böyle bir şey mümkünse.
Biraz düşündükten sonra makalenin ikinci bölümünün yazılmasına karar verildi.
Şu anda, ikinci bölüm çok katmanlı sinir ağları ile çalışmayı kapsayacaktır. İçeriği hakkında herhangi bir isteğiniz varsa - lütfen, kısaca, bunları yazın. Parmaklarımla aktarabileceğim fikirler makalede açıklanacaktır.
Teşekkür ederim.
Gradyan öğrenme yönteminin parmaklar üzerinde anlatıldığını görmek isterim.
Anadili Rusça olanlar arasında bağımsız öğrenme sürecine "parametre uydurma" demenin alışılagelmiş bir şey olmadığını "safça varsayıyorum". Aynı şekilde herhangi bir sistem için parametre seçimini (dış süreçlerin yardımıyla) öğrenme olarak adlandırmak da kabul görmez.
Uydurma işlemini nasıl adlandırırsanız adlandırın, bu işlem uydurma olmaktan çıkmayacaktır.
Durağan olmayan verilerle çalışan sinir ağları için optimizasyon, uydurma ve öğrenme eşanlamlıdır. Çünkü her üç terim de aynı anlama gelir: sinir ağı çıktısındaki hataları en aza indirmek için geçmiş tarihsel veriler (eğitim örneği) için ağırlık katsayılarının seçilmesi. Şebekeyi gelecekteki verilerle beslemek mümkün olsaydı, o zaman farklı bir mesele olurdu. Ancak ofis malzemeleri satan dükkanlarda henüz zaman makineleri satılmıyor, bu yüzden geçmişe uymak zorundayız.
İlgimi çeken tek bir soru var: "harici" bir optimize edici kullanmadan kendi kendine öğrenebilen bir programın nasıl oluşturulacağı. Tabii bu aşamada böyle bir şey mümkünse.
Çok basit. EA kodu, ağın kendisini ve yeni veriler geldiğinde otomatik olarak başlatılabilen ağırlık optimize edicisini içerebilir. Sinir ağları altında çoğu durumda bu tür kendi kendine öğrenen ağları kastediyoruz. Harici olarak, örneğin test cihazı optimize edicisi tarafından eğitilen ağlar oyuncaktır.
Çocuklar, bana yardım edin! Giriş verilerinin normalizasyonunun ağın tüm eğitim dönemi için yapılması gerektiğini doğru anladım mı? Yani xi'nin maksimum ve minimum değerleri tüm dönemden mi alınmalı?
net: Çocuklar, bana yardım edin! Giriş verilerinin normalizasyonunun ağın tüm eğitim dönemi için yapılması gerektiğini doğru anladım mı? Yani xi'nin maksimum ve minimum değerleri tüm dönemden mi alınmalı?
//+------------------------------------------------------------------+//|macd-nöro-örnek.mq5 |//| Telif Hakkı 2012, MetaQuotes Software Corp. | |//|http://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2012, MetaQuotes Software Corp."#property link "http://www.mql5.com"#property version "1.00"//+------------------------------------------------------------------+//| Uzman başlatma işlevi|//+------------------------------------------------------------------+#define SIZE 1000#include <Trade\Trade.mqh> //ticaret işlemlerini gerçekleştirmek için kütüphaneyi bağlayın#include <Trade\PositionInfo.mqh> //pozisyonlar hakkında bilgi almak için kütüphaneyi bağlayın#include <Indicators/TimeSeries.mqh>//--- ağırlık katsayılarının değerleri inputdouble w0=0.5;
inputdouble w1=0.5;
inputdouble w2=0.5;
inputdouble w3=0.5;
inputdouble w4=0.5;
inputdouble w5=0.5;
inputdouble w6=0.5;
inputdouble w7=0.5;
inputdouble w8=0.5;
inputdouble w9=0.5;
inputdouble w10=0.5;
inputdouble w11=0.5;
inputdouble w12=0.5;
string my_symbol; // karakteri saklamak için değişkendouble inputsH[13]; // giriş sinyallerini saklamak için dizidouble inputsL[13]; // giriş sinyallerini saklamak için diziint periods[13]={2,3,5,8,13,21,34,55,89,144,233,377,610};
int B,Ba;
double weight[13]; // ağırlık katsayılarını saklamak için dizidouble High[SIZE],Low[SIZE];
CTrade m_Trade; // ticaret işlemlerini gerçekleştirmek için nesne
CPositionInfo m_Position; // konum bilgisi için nesne//+------------------------------------------------------------------+//||//+------------------------------------------------------------------+intOnInit()
{
weight[0]=w0;
weight[1]=w1;
weight[2]=w2;
weight[3]=w3;
weight[4]=w4;
weight[5]=w5;
weight[6]=w6;
weight[7]=w7;
weight[8]=w8;
weight[9]=w9;
weight[10]=w10;
weight[11]=w11;
weight[12]=w12;
my_symbol=Symbol();
B=Bars(my_symbol,0);
//--- return 0, başlatma tamamlandıreturn(0);
}
//+------------------------------------------------------------------+//| Uzman başlangıçtan kaldırma işlevi|//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{ }
//+------------------------------------------------------------------+//| Uzman tik fonksiyonu|//+------------------------------------------------------------------+voidOnTick()
{
double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); // satın almak için en iyi teklifdouble Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); // satış için en iyi teklif
B=Bars(my_symbol,0);
if(B!=Ba)
{
CiHigh hi;
CiLow li;
hi.Create(_Symbol,_Period);
li.Create(_Symbol,_Period);
hi.GetData(0,SIZE,High);
li.GetData(0,SIZE,Low);
}
Ba=B;
{
for(int i=0; i<13; i++)
{
int HB = ArrayMaximum(High,SIZE-periods[i],periods[i]);
int LB = ArrayMinimum(Low, SIZE-periods[i],periods[i]);
if(Bid>=High[HB]) inputsH[i] =1;
else inputsH[i]=0;
if(Bid<=Low[LB]) inputsL[i]=1;
else inputsL[i]=0;
}
double outH=CalculateNeuron(inputsH,weight);
double outL=CalculateNeuron(inputsL,weight);
//--- nöron çıkış değeri 0'dan küçükseif(outL>0)
{
//--- eğer bu karakter için zaten bir pozisyon varsaif(m_Position.Select(my_symbol))
{
//--- ve bu pozisyonun türü Sell ise, o zaman kapatınif(m_Position.PositionType()==POSITION_TYPE_SELL) m_Trade.PositionClose(my_symbol);
//--- ve bu pozisyonun türü Alış ise, o zaman çıkın.if(m_Position.PositionType()==POSITION_TYPE_BUY) return;
}
//--- eğer buraya geldiyseniz, pozisyon yok, açın.
m_Trade.Buy(0.1,my_symbol);
}
//--- nöron çıkış değeri 0'dan büyük veya eşitseif(outH>0)
{
//--- eğer bu karakter için zaten bir pozisyon varsaif(m_Position.Select(my_symbol))
{
//--- ve bu pozisyonun türü Alış ise, o zaman kapatınif(m_Position.PositionType()==POSITION_TYPE_BUY) m_Trade.PositionClose(my_symbol);
//--- ve bu pozisyonun türü Satış ise, o zaman çıkın.if(m_Position.PositionType()==POSITION_TYPE_SELL) return;
}
//--- eğer buraya geldiyseniz, pozisyon yok, açın.
m_Trade.Sell(0.1,my_symbol);
}
if(outH>0.0 || outL>0) Print(outH," ",outL);
}
}
//+------------------------------------------------------------------+//|| Nöron hesaplama fonksiyonu|//+------------------------------------------------------------------+double CalculateNeuron(double &inputs[],double &w[])
{
//--- giriş sinyallerinin ağırlıklı toplamını saklamak için değişkendouble NET=0.0;
//--- döngü içinde girdi sayısına göre girdilerin ağırlıklı ortalama toplamını elde edinfor(int n=0;n<ArraySize(inputs);n++)
{
NET+=inputs[n]*w[n];
}
//--- girdilerin ağırlıklı ortalama toplamını katkı faktörü ile çarpınreturn(ActivateNeuron(NET));
}
//+------------------------------------------------------------------+//|| Nöron aktivasyon fonksiyonu|//+------------------------------------------------------------------+double ActivateNeuron(double x)
{
//--- aktivasyon fonksiyonunun sonucunu saklamak için değişkendouble Out;
//--- hiperbolik tanjant fonksiyonu
Out=(exp(x)-exp(-x))/(exp(x)+exp(-x));
//--- aktivasyon fonksiyonunun değerini döndürürreturn(Out);
}
//+------------------------------------------------------------------+
Bu baykuşu ben yazdım. Bunun bir sinir ağı olduğunu söyleyebilir miyiz, çünkü şüphelerim var.
Kanalda işlem yapmak için baykuş.
Algoritma aşağıdaki gibidir: Fibo çubuklarının sayısı için ekstremumlar alınır (2,3,5,8,13....). Örneğin satın alınacak her nöron için - fiyat bir dönem için ekstremum DÜŞÜK fiyatının altında veya ona eşitse, aksi takdirde 1 döndürün - 0. Ayrıca, NeuronMACD örneğinde olduğu gibi. Satmak için - tersini yansıtın.
Bu baykuşu ben yazdım. Bunun bir sinir ağı olduğunu söyleyebilir miyiz, çünkü şüphelerim var.
Kanalda işlem yapmak için baykuş.
Algoritma aşağıdaki gibidir: Fibo çubuklarının sayısı için ekstremumlar alınır (2,3,5,8,13....). Örneğin, satın alınacak her nöron için - fiyat bir dönem için DÜŞÜK ekstremum fiyatının altında veya ona eşitse, aksi takdirde 1 döndürürüz - 0. Ayrıca, NeuronMACD örneğinde olduğu gibi. Satmak için - tersini yansıtın.
Kod ve algoritmanın eleştirisini bekliyorum.
Sizin durumunuzda, nöron aktivasyonunun işlevi atılabilir, bu gereksiz bir frendir.
return(NET);
Bu bir sinir ağı değil, sadece bir algılayıcı. Bir ağ için en az birkaç algılayıcıya ihtiyacınız vardır.
Şimdiye kadar, yukarıda sorduğum ayrıntıların yokluğu, sıradan bir aptal olarak beni sersemletti. Makaleyi üç kez tekrar okudum, ancak gerekli cevapları sadece forumda buldum.
Biraz düşündükten sonra makalenin ikinci bölümünün yazılmasına karar verildi.
Şu anda, ikinci bölüm çok katmanlı sinir ağları ile çalışmayı kapsayacaktır.
İçeriği hakkında herhangi bir isteğiniz varsa - lütfen, kısaca, bunları yazın.
Parmaklarımla aktarabileceğim fikirler makalede açıklanacaktır.
Teşekkür ederim.
Anadili Rusça olanlar arasında bağımsız öğrenme sürecine "parametre uydurma" demenin alışılagelmiş bir şey olmadığını "safça varsayıyorum". Aynı şekilde herhangi bir sistem için parametre seçimini (dış süreçlerin yardımıyla) öğrenme olarak adlandırmak da kabul görmez.
Uydurma işlemini nasıl adlandırırsanız adlandırın, bu işlem uydurma olmaktan çıkmayacaktır.
Durağan olmayan verilerle çalışan sinir ağları için optimizasyon, uydurma ve öğrenme eşanlamlıdır. Çünkü her üç terim de aynı anlama gelir: sinir ağı çıktısındaki hataları en aza indirmek için geçmiş tarihsel veriler (eğitim örneği) için ağırlık katsayılarının seçilmesi. Şebekeyi gelecekteki verilerle beslemek mümkün olsaydı, o zaman farklı bir mesele olurdu. Ancak ofis malzemeleri satan dükkanlarda henüz zaman makineleri satılmıyor, bu yüzden geçmişe uymak zorundayız.
Bir uydurmaya ne derseniz deyin, o bir uydurma olmaktan çıkmayacaktır.
İlgimi çeken tek bir soru var: "harici" bir optimize edici kullanmadan kendi kendine öğrenebilen bir programın nasıl oluşturulacağı. Tabii bu aşamada böyle bir şey mümkünse.
Çok basit. EA kodu, ağın kendisini ve yeni veriler geldiğinde otomatik olarak başlatılabilen ağırlık optimize edicisini içerebilir. Sinir ağları altında çoğu durumda bu tür kendi kendine öğrenen ağları kastediyoruz. Harici olarak, örneğin test cihazı optimize edicisi tarafından eğitilen ağlar oyuncaktır.
Çocuklar, bana yardım edin! Giriş verilerinin normalizasyonunun ağın tüm eğitim dönemi için yapılması gerektiğini doğru anladım mı? Yani xi'nin maksimum ve minimum değerleri tüm dönemden mi alınmalı?
Bu baykuşu ben yazdım. Bunun bir sinir ağı olduğunu söyleyebilir miyiz, çünkü şüphelerim var.
Kanalda işlem yapmak için baykuş.
Algoritma aşağıdaki gibidir: Fibo çubuklarının sayısı için ekstremumlar alınır (2,3,5,8,13....). Örneğin satın alınacak her nöron için - fiyat bir dönem için ekstremum DÜŞÜK fiyatının altında veya ona eşitse, aksi takdirde 1 döndürün - 0. Ayrıca, NeuronMACD örneğinde olduğu gibi. Satmak için - tersini yansıtın.
Kod ve algoritma hakkında eleştiri bekliyorum.
Bu baykuşu ben yazdım. Bunun bir sinir ağı olduğunu söyleyebilir miyiz, çünkü şüphelerim var.
Kanalda işlem yapmak için baykuş.
Algoritma aşağıdaki gibidir: Fibo çubuklarının sayısı için ekstremumlar alınır (2,3,5,8,13....). Örneğin, satın alınacak her nöron için - fiyat bir dönem için DÜŞÜK ekstremum fiyatının altında veya ona eşitse, aksi takdirde 1 döndürürüz - 0. Ayrıca, NeuronMACD örneğinde olduğu gibi. Satmak için - tersini yansıtın.
Kod ve algoritmanın eleştirisini bekliyorum.
Sizin durumunuzda, Nöron Aktivasyon Fonksiyonu gereksiz bir fren olarak dışarı atılabilir.