Вероятностные нейронные сети, пакеты и алгоритмы для MT4 - страница 11

 
renegate:
Господа!
Так что на вход нейросети подавать будем? Какой функционал ошибки выберем?


Судя по содержанию, это мало кого интересует. Многие думают, что дело в софте....

Предлагаю начать с угла наклона лин. регрессии с разными периодами. И можно с разных ТФ. :)

Функционал ошибки - максимальная прибыль.

 
klot:

Судя по содержанию, это мало кого интересует. Многие думают, что дело в софте....


Да, блин !!!, понаплодили тем про нейронки. И везде флудеры любое обсуждение забивают тупыми просьбами софта и десятками мессаг "и мне и мне и мне".

Так что нормально и обсудить-то негде. Может есть где жестко модерируемый форум, где флудеров отстреливают? Раз брякнул - замечание, два не в тему сказал - вечный игнор.

Клот ты много где пасешься, может есть на примете местечко?

 
TedBeer:
klot:

Судя по содержанию, это мало кого интересует. Многие думают, что дело в софте....


Да, блин !!!, понаплодили тем про нейронки. И везде флудеры любое обсуждение забивают тупыми просьбами софта и десятками мессаг "и мне и мне и мне".

Так что нормально и обсудить-то негде. Может есть где жестко модерируемый форум, где флудеров отстреливают? Раз брякнул - замечание, два не в тему сказал - вечный игнор.

Клот ты много где пасешься, может есть на примете местечко?


Открыл я себе форум. теперь там и буду пастись :) И всех приглашаю к практическому обсуждению. Флудеров буду сам отстреливать. :)

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

понемногу свои наработки из разных мест туда перекидываю.

 

Пример простейшей неросети

MICROSOFT VISUAL C++ 6.0

сеть учиться операции 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;
}
Файлы:
bp_case.zip  41 kb
 

Еще одна простая сеть !

MICROSOFT VISUAL C++ 6.0

в данной версии можно добавлять слои - в слоях менять количестов нейронов

изначально в исходнике 3 слоя

2 нейрона на входе два в скрытом слое и один на выходе!

// Create a 3-layer neural net to solve the XOR problem, with 2 nodes in the first two layers,
// and a single node in the output layer.
CBPNet XOR( 3 /* num layers */, 2 /* inputs */,2 /* hidden */,1 /* outputs */ );

// connect the neurons up
//
// O - Output
// / \
// O O - Hidden
// |\ /|
// | X |
// |/ \|
// O O - Input
//

к примеру если в скрытый слой поместить 3 нейрона - результат становиться более точным


CBPNet XOR( 3 /* num layers */, 2 /* inputs */,3 /* hidden */,1 /* outputs */ );

увеличекние количетва слоев потребовало та же увеличить количество нейронов в скытых слоях

CBPNet XOR( 4 /* num layers */, 2 /* inputs */,20 /* hidden 1 */ ,5 /* hidden 2 */ ,1 /* outputs */ );

при увеличении слоев таже необходимо добавить вызов

// apply the bias to the hidden layer, and output layer
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 );

результат удалось получить, но сеть намного медленеей стала учиться!

Файлы:
cftai.zip  14 kb
 
klot:
Открыл я себе форум. теперь там и буду пастись :) И всех приглашаю к практическому обсуждению. Флудеров буду сам отстреливать. :)
пошел регистрироваться
 

и совсем красивая обучалка!

Файлы:
summing1.zip  48 kb
 

Красиво получается. Можно еще попробовать научить сеть таблице умножения, в форме распознавания паттернов.

Типа: in[0]=2; in[1]=2; out_des[0]=4; и т.д....

 
YuraZ:

и совсем красивая обучалка!

Кто бы ее еще откомпилировал для непрограммистов...
 
klot:
renegate:
Господа!
Так что на вход нейросети подавать будем? Какой функционал ошибки выберем?


Судя по содержанию, это мало кого интересует. Многие думают, что дело в софте....

Предлагаю начать с угла наклона лин. регрессии с разными периодами. И можно с разных ТФ. :)

Функционал ошибки - максимальная прибыль.

Может лучше Функционал ошибки - не максимальная прибыль, а невязка (разница между прогнозом и Close[0]).