Réseaux neuronaux probabilistes, paquets et algorithmes pour MT4 - page 11

 
renegate:
Messieurs !
Que devons-nous donc introduire dans l'entrée du réseau neuronal? Quelle fonction d'erreur devons-nous choisir ?


À en juger par le contenu, peu de gens sont intéressés. Beaucoup de gens pensent qu'il s'agit du logiciel.....

Je vous suggère de commencer par la pente de la ligne de régression avec différentes périodes. Et vous pouvez commencer avec différentes TF. :)

Fonctionnalité de l'erreur - profit maximum.

 
klot:

À en juger par le contenu, peu de gens sont intéressés. Beaucoup de gens pensent que c'est le logiciel.....


Oui, il y a beaucoup de discussions sur les neurones. Et partout, les inondateurs encombrent toute discussion avec des demandes stupides de logiciels et des dizaines de messages "moi et moi et moi".

Il n'y a donc aucun endroit pour en discuter correctement. Peut-être qu'il y a un forum strictement modéré où ils tirent sur les larbins ? Si vous dites un mot, vous recevez une réprimande ; si vous dites deux choses hors sujet, vous êtes ignoré pour toujours.

Cloth, tu as beaucoup d'endroits où traîner, tu as peut-être un endroit en tête ?

 
TedBeer:
klot:

À en juger par le contenu, peu de gens sont intéressés. Beaucoup de gens pensent qu'il s'agit du logiciel .....


Oh mec ! !!, tellement de sujets sur la neuronique. Et partout, les inondateurs encombrent toute discussion avec des demandes stupides de logiciels et des dizaines de messages "moi et moi et moi".

Il n'y a donc aucun endroit pour en discuter correctement. Peut-être qu'il y a un forum strictement modéré où ils tirent sur les larbins ? Si vous dites un mot, vous recevez une réprimande ; si vous dites deux choses hors sujet, vous êtes ignoré pour toujours.

Cloth, tu as beaucoup d'endroits où traîner, peut-être que tu as un endroit que tu aimerais essayer.


J'ai créé un forum. Je vais y paître maintenant :) Et j'invite tout le monde à avoir une discussion pratique. Je vais abattre les inondateurs moi-même. :)

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

Je transfère petit à petit mes découvertes de différents endroits.

 

Un exemple de non-réseau simple

MICROSOFT VISUAL C++ 6.0

le réseau apprend l'opération XOR

 
/* ========================================== *
 * 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;
}
Dossiers :
bp_case.zip  41 kb
 

Un autre réseau simple !

MICROSOFT VISUAL C++ 6.0

cette version vous permet d'ajouter des couches - de modifier le nombre de neurones dans les couches

initialement il y a 3 couches dans la source

2 neurones à l'entrée - deux dans une couche cachée et un à la sortie !

// Créez un réseau neuronal à 3 couches pour résoudre le problème XOR, avec 2 nœuds dans les deux premières couches,
// et un seul nœud dans la couche de sortie.
CBPNet XOR( 3 /* nombre de couches */, 2 /* entrées */,2 /* cachées */,1 /* sorties */ ) ;

// connecter les neurones vers le haut
//
// O - Sortie
// \
// // O - Caché
// |\N /|
// | | X
// |/ \N
// O - Entrée
//

par exemple si vous mettez 3 neurones dans une couche cachée, le résultat devient plus précis


CBPNet XOR( 3 /* nombre de couches */, 2 /* entrées */,3 /* cachées */,1 /* sorties */ ) ;

augmenter le nombre de couches nécessite également d'augmenter le nombre de neurones dans les couches cachées

CBPNet XOR( 4 /* num couches */, 2 /* entrées */,20 /* caché 1 */ ,5 /* caché 2 */ ,1 /* sorties */ ) ;

Si vous augmentez les couches, vous devez également ajouter un appel

// appliquer le biais à la couche cachée et à la couche de sortie
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 ) ;

J'ai réussi à obtenir le résultat, mais le réseau est beaucoup plus lent à apprendre !

Dossiers :
cftai.zip  14 kb
 
klot:
J'ai créé un forum. Je vais y paître maintenant :) Et j'invite tout le monde à avoir une discussion pratique. Je vais abattre les inondateurs moi-même. :)
Je vais m'inscrire.
 

et un tutoriel absolument magnifique !

Dossiers :
summing1.zip  48 kb
 

Il fonctionne à merveille. Vous pouvez également essayer d'enseigner au réseau une table de multiplication, sous la forme d'une reconnaissance des formes.

Comme : in[0]=2 ; in[1]=2 ; out_des[0]=4 ; etc.....

 
YuraZ:

et un tutoriel absolument magnifique !

Qui d'autre le compilerait pour les non-programmeurs...
 
klot:
Renegate:
Messieurs !
Alors, que devons-nous introduire dans l'entrée du réseau neuronal? Quelle fonction d'erreur choisir ?


À en juger par le contenu, peu de gens sont intéressés. Beaucoup de gens pensent qu'il s'agit du logiciel.....

Je vous suggère de commencer par la pente de la ligne de régression avec différentes périodes. Et vous pouvez commencer avec différentes TF. :)

Erreur fonctionnelle - profit maximal.

Peut-être serait-il préférable d'utiliser la fonctionnalité d'erreur - pas le profit maximum, mais le déliage (différence entre la prévision et Close[0]).

Raison: