İç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?
İç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. :)
/* ========================================== *
* 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>#defineBP_LEARNING(float)(0.5)// The learning coefficient.classCBPNet{public:
CBPNet();
~CBPNet(){};
floatTrain(float, float, float);
floatRun(float, float);
private:
floatm_fWeights[3][3]; // Weights for the 3 neurons.floatSigmoid(float); // The sigmoid function.};
CBPNet::CBPNet(){srand((unsigned)(time(NULL)));
for(inti=0;i<3;i++){for(intj=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;
}}}floatCBPNet::Train(floati1, floati2, floatd){// These are all the main variables used in the // routine. Seems easier to group them all here.floatnet1, 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').floatdeltas[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.floatv1 = i1, v2 = i2;
for(inti=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];
}returnout;
}floatCBPNet::Sigmoid(floatnum){return(float)(1/(1+exp(-num)));
}floatCBPNet::Run(floati1, floati2){// I just copied and pasted the code from the Train() function,// so see there for the necessary documentation.floatnet1, 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];
returnSigmoid(net1);
}//---#include <iostream.h>#include"bpnet.h"#defineBPM_ITER2000voidmain(){CBPNetbp;
for(inti=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;
}
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ı!
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.
İç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?
İç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
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ı!
Kendime bir forum açtım. şimdi orada otlayacağım :) Ve herkesi pratik bir tartışmaya davet ediyorum. Fluders kendimi vuracak. :)
Ve çok güzel bir öğretici!
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....
Ve çok güzel bir öğretici!
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).