MT4 için Olasılıksal Sinir Ağları, Paketler ve Algoritmalar - sayfa 11

 
renegate :
Kral!
Peki sinir ağının girişine ne sağlayacağız? Hangi hata fonksiyonunu seçeceğiz?


İçeriğe bakılırsa, bu hiç kimseyi ilgilendirmez. Bir çok insan bunun yazılım olduğunu düşünüyor...

Çizginin eğim açısıyla başlamayı öneriyorum. farklı dönemlere sahip regresyonlar. Ve farklı TF ile yapabilirsiniz. :)

Hata fonksiyoneli maksimum kârdır.

 
klot :

İçeriğe bakılırsa, bu hiç kimseyi ilgilendirmez. Bir çok insan bunun yazılım olduğunu düşünüyor...


Evet, kahretsin !!!, nöronlarla ilgili konulara yol açtılar. Ve her yerde akıcılar herhangi bir tartışmayı yazılımdan gelen aptal isteklerle ve "bana, bana ve bana" düzinelerce mesajla doldurur.

Yani bu normal ve tartışacak bir yer yok. Belki de sel baskınlarının vurulduğu yoğun şekilde yönetilen bir forum vardır? Bir kez ağzından çıktı - bir açıklama, iki konu dışı dedi - sonsuz bir görmezden geldi.

Pıhtı bir çok yerde otlatır belki aklında bir yer vardır?

 
TedBeer :
klot :

İçeriğe bakılırsa, bu pek ilgi çekici değil. Bir çok insan bunun yazılım olduğunu düşünüyor...


Evet, kahretsin !!!, nöronlarla ilgili konulara yol açtılar. Ve her yerde akıcılar herhangi bir tartışmayı yazılımdan gelen aptal isteklerle ve "bana, bana ve bana" düzinelerce mesajla doldurur.

Yani bu normal ve tartışacak bir yer yok. Belki de sel baskınlarının vurulduğu yoğun şekilde yönetilen bir forum vardır? Bir kez ağzından çıktı - bir açıklama, iki konu dışı dedi - sonsuz bir görmezden geldi.

Pıhtı bir çok yerde otlatır belki aklında bir yer vardır?


Kendime bir forum açtım. şimdi orada otlayacağım :) Ve herkesi pratik bir tartışmaya davet ediyorum. Fluders kendimi vuracak. :)

http://www.fxreal.ru/forums/index.php

Oradaki farklı yerlerden çalışmalarımı yavaş yavaş aktarıyorum.

 

En basit ağ dışı örnek

MICROSOFT GÖRSEL C++ 6.0

ağ öğrenme XOR işlemi

 
/* ========================================== *
 * Filename:    bpnet.h                       *
 * Author:        James Matthews.               *
 *                                              *
 * Description:                                  *
 * This is a tiny neural network that uses      *
 * back propagation for weight adjustment.      *
 * ========================================== */
 
#include < math . h >
#include < stdlib . h >
#include < time . h >
 
#define BP_LEARNING    ( float )( 0.5 )    // The learning coefficient.
 
class CBPNet {
    public :
        CBPNet () ;
        ~ CBPNet () {} ;
 
        float Train ( float , float , float ) ;
        float Run ( float , float ) ;
 
    private :
        float m_fWeights [ 3 ][ 3 ] ;        // Weights for the 3 neurons.
 
        float Sigmoid ( float ) ;        // The sigmoid function.
} ;
 
CBPNet :: CBPNet () {
    srand (( unsigned )( time ( NULL ))) ;
    
    for ( int i = 0 ; i < 3 ; i ++ ) {
        for ( int j = 0 ; j < 3 ; j ++ ) {
            // For some reason, the Microsoft rand() function
            // generates a random integer. So, I divide by the
            // number by MAXINT/2, to get a num between 0 and 2,
            // the subtract one to get a num between -1 and 1.
            m_fWeights [ i ][ j ] = ( float )( rand ()) / ( 32767 / 2 ) - 1 ;
        }
    }
}
 
float CBPNet :: Train ( float i1 , float i2 , float d ) {
    // These are all the main variables used in the 
    // routine. Seems easier to group them all here.
    float net1 , net2 , i3 , i4 , out ;
    
    // Calculate the net values for the hidden layer neurons.
    net1 = 1 * m_fWeights [ 0 ][ 0 ] + i1 * m_fWeights [ 1 ][ 0 ] +
          i2 * m_fWeights [ 2 ][ 0 ] ;
    net2 = 1 * m_fWeights [ 0 ][ 1 ] + i1 * m_fWeights [ 1 ][ 1 ] +
          i2 * m_fWeights [ 2 ][ 1 ] ;
 
    // Use the hardlimiter function - the Sigmoid.
    i3 = Sigmoid ( net1 ) ;
    i4 = Sigmoid ( net2 ) ;
 
    // Now, calculate the net for the final output layer.
    net1 = 1 * m_fWeights [ 0 ][ 2 ] + i3 * m_fWeights [ 1 ][ 2 ] +
             i4 * m_fWeights [ 2 ][ 2 ] ;
    out = Sigmoid ( net1 ) ;
 
    // We have to calculate the deltas for the two layers.
    // Remember, we have to calculate the errors backwards
    // from the output layer to the hidden layer (thus the
    // name 'BACK-propagation').
    float deltas [ 3 ] ;
    
    deltas [ 2 ] = out * ( 1 - out ) * ( d - out ) ;
    deltas [ 1 ] = i4 * ( 1 - i4 ) * ( m_fWeights [ 2 ][ 2 ]) * ( deltas [ 2 ]) ;
    deltas [ 0 ] = i3 * ( 1 - i3 ) * ( m_fWeights [ 1 ][ 2 ]) * ( deltas [ 2 ]) ;
 
    // Now, alter the weights accordingly.
    float v1 = i1 , v2 = i2 ;
    for ( int i = 0 ; i < 3 ; i ++ ) {
        // Change the values for the output layer, if necessary.
        if ( i == 2 ) {
            v1 = i3 ;
            v2 = i4 ;
        }
                
        m_fWeights [ 0 ][ i ] += BP_LEARNING * 1 * deltas [ i ] ;
        m_fWeights [ 1 ][ i ] += BP_LEARNING * v1 * deltas [ i ] ;
        m_fWeights [ 2 ][ i ] += BP_LEARNING * v2 * deltas [ i ] ;
    }
 
    return out ;
}
 
float CBPNet :: Sigmoid ( float num ) {
    return ( float )( 1 / ( 1 + exp ( - num ))) ;
}
 
float CBPNet :: Run ( float i1 , float i2 ) {
    // I just copied and pasted the code from the Train() function,
    // so see there for the necessary documentation.
    
    float net1 , net2 , i3 , i4 ;
    
    net1 = 1 * m_fWeights [ 0 ][ 0 ] + i1 * m_fWeights [ 1 ][ 0 ] +
          i2 * m_fWeights [ 2 ][ 0 ] ;
 
    net2 = 1 * m_fWeights [ 0 ][ 1 ] + i1 * m_fWeights [ 1 ][ 1 ] +
          i2 * m_fWeights [ 2 ][ 1 ] ;
 
    i3 = Sigmoid ( net1 ) ;
    i4 = Sigmoid ( net2 ) ;
 
    net1 = 1 * m_fWeights [ 0 ][ 2 ] + i3 * m_fWeights [ 1 ][ 2 ] +
             i4 * m_fWeights [ 2 ][ 2 ] ;
    return Sigmoid ( net1 ) ;
}
 
//---
 
#include < iostream . h >
#include " bpnet.h "
 
#define BPM_ITER    2000
 
void main () {
 
    CBPNet bp ;
 
    for ( int i = 0 ; i < BPM_ITER ; i ++ ) {
        bp . Train ( 0 , 0 , 0 ) ;
        bp . Train ( 0 , 1 , 1 ) ;
        bp . Train ( 1 , 0 , 1 ) ;
        bp . Train ( 1 , 1 , 0 ) ;
    }
 
    cout << " 0,0 = " << bp . Run ( 0 , 0 ) << endl ;
    cout << " 0,1 = " << bp . Run ( 0 , 1 ) << endl ;
    cout << " 1,0 = " << bp . Run ( 1 , 0 ) << endl ;
    cout << " 1,1 = " << bp . Run ( 1 , 1 ) << endl ;
}
Dosyalar:
bp_case.zip  41 kb
 

Başka bir basit ağ!

MICROSOFT GÖRSEL C++ 6.0

bu sürümde katmanlar ekleyebilirsiniz - katmanlardaki nöronların sayısını değiştirebilirsiniz

başlangıçta kaynakta 3 katman

Girişte 2, gizli katmanda iki ve çıkışta bir nöron!

// XOR problemini çözmek için ilk iki katmanda 2 düğüm olacak şekilde 3 katmanlı bir sinir ağı oluşturun,
// ve çıktı katmanında tek bir düğüm.
CBPNet XOR( 3 /* num katmanları */, 2 /* girişler */,2 /* gizli */,1 /* çıkışlar */ );

// nöronları bağla
//
// O - Çıktı
// / \
// OO - Gizli
// |\ /|
// | x |
// |/ \|
// OO-Girdi
//

örneğin gizli katmana 3 nöron koyarsanız sonuç daha doğru olur


CBPNet XOR( 3 /* num katmanları */, 2 /* girişler */,3 /* gizli */,1 /* çıkışlar */ );

katman sayısını artırmak, gizli katmanlardaki nöron sayısında aynı artışı gerektiriyordu.

CBPNet XOR( 4 /* num katman */, 2 /* giriş */,20 /* gizli 1 */ ,5 /* gizli 2 */ ,1 /* çıkış */ );

katmanları arttırırken, ayrıca bir çağrı eklemeniz gerekir.

// önyargıyı gizli katmana ve çıktı katmanına uygulayın
XOR.SetBias( POINT2D (0,1),BIAS_GLOBAL);
XOR.SetBias(POINT2D(1,1),BIAS_GLOBAL);
XOR.SetBias(POINT2D(1,1),BIAS_GLOBAL);
XOR.SetBias(POINT2D(0,2),BIAS_GLOBAL);

sonuç elde edildi, ancak ağ çok daha yavaş öğrenmeye başladı!

Dosyalar:
cftai.zip  14 kb
 
klot :
Kendime bir forum açtım. şimdi orada otlayacağım :) Ve herkesi pratik bir tartışmaya davet ediyorum. Fluders kendimi vuracak. :)
kayıt olmaya gitti
 

Ve çok güzel bir öğretici!

Dosyalar:
summing1.zip  48 kb
 

Güzel çıkıyor. Ayrıca ağa çarpım tablosunu örüntü tanıma şeklinde öğretmeyi deneyebilirsiniz.

Tür: in[0]=2; içinde[1]=2; out_des[0]=4; vb....

 
YuraZ :

Ve çok güzel bir öğretici!

Programcı olmayanlar için başka kim derler ki ...
 
klot :
dönek :
Kral!
Peki sinir ağının girişine ne sağlayacağız? Hangi hata fonksiyonunu seçeceğiz?


İçeriğe bakılırsa, bu hiç kimseyi ilgilendirmez. Bir çok insan bunun yazılım olduğunu düşünüyor...

Çizginin eğim açısıyla başlamayı öneriyorum. farklı dönemlere sahip regresyonlar. Ve farklı TF ile yapabilirsiniz. :)

Hata fonksiyoneli maksimum kârdır.

Belki daha iyi Hata işlevi maksimum kâr değil, tutarsızlıktır (tahmin ile Kapat[0] arasındaki fark).

Neden: