ara_tz
سه شنبه 10 دی 1392, 16:45 عصر
سلام دوستان
من توی متلب یه شبکه عصبی MLP با سه لایه درست کردم که:
لایه اول 9 تا نرون داره و 9 تا ورودی میگیره
لایه دوم 5 تا نرون داره و 9 تا ورودی میگیره
لایه سوم که خروجی میشه 1 نرون با 5 تا ورودی داره
خروجی هر نرون هم تابع tansig هستش.
من اومدم این شبکه رو توی #C شبیه سازی کنم. این کلاس نرون منه:
public class Neuron
{
public Neuron(){}
public Neuron(int SumOfInputs)
{
m_SumOfInputs = SumOfInputs;
}
public double act(double [] Input, double [] weight, double bias)
{
double tmp = bias;
double t;
for (int i = 0; i < m_SumOfInputs; i++)
{
t= (Input * weight);
tmp += t;
}
m_output = 2/ (1 + Math.Exp(-2*tmp))-1 ;
return m_output;
}
public double m_output;
private int m_SumOfInputs;
};
تابع act میاد خروجی نرون رو حساب میکنه.
من وزن ها رو از متلب گرفتم، وزن لایه ورودی با IW وزن لایه های بعدی با LW و همینطور مقدار بایاس رو با b گرفتم از شبکه و توی سی شارپ سیو کردم به صورت آرایه ای از نوع دابل.
اما من هر ورودی که میدم به برنامه اون خروجی که تو متلب میده رو به من نمیده، اعدادش کاملا متفاوته.
این هم کد شبکه عصبی منه که قراره به لایه ها ورودی ها رو بده:
public double Calculate(double[] inputs)
{
double[] ILay_Outputs = new double[9];
double[] HLay_Outputs = new double[5];
//net 1 ,2
//inputLayer acting
ILay_Outputs[0] = InputLayer[0].act(inputs, IW1, Ib[0]);
ILay_Outputs[1] = InputLayer[1].act(inputs, IW2, Ib[1]);
ILay_Outputs[2] = InputLayer[2].act(inputs, IW3, Ib[2]);
ILay_Outputs[3] = InputLayer[3].act(inputs, IW4, Ib[3]);
ILay_Outputs[4] = InputLayer[4].act(inputs, IW5, Ib[4]);
ILay_Outputs[5] = InputLayer[5].act(inputs, IW6, Ib[5]);
ILay_Outputs[6] = InputLayer[6].act(inputs, IW7, Ib[6]);
ILay_Outputs[7] = InputLayer[7].act(inputs, IW8, Ib[7]);
ILay_Outputs[8] = InputLayer[8].act(inputs, IW9, Ib[8]);
//HiddenLayer acting
HLay_Outputs[0] = HiddenLayer[0].act(ILay_Outputs, HW1, Hb[0]);
HLay_Outputs[1] = HiddenLayer[1].act(ILay_Outputs, HW2, Hb[1]);
HLay_Outputs[2] = HiddenLayer[2].act(ILay_Outputs, HW3, Hb[2]);
HLay_Outputs[3] = HiddenLayer[3].act(ILay_Outputs, HW4, Hb[3]);
HLay_Outputs[4] = HiddenLayer[4].act(ILay_Outputs, HW5, Hb[4]);
//OutputLayer acting
OutputLayer.act(HLay_Outputs, OW, Ob);
return OutputLayer.m_output;
}
کسی از شما دوستان میتونه کمکم کنه بخدا دیگه دارم دیونه میشم!
مرسی از همتون
من توی متلب یه شبکه عصبی MLP با سه لایه درست کردم که:
لایه اول 9 تا نرون داره و 9 تا ورودی میگیره
لایه دوم 5 تا نرون داره و 9 تا ورودی میگیره
لایه سوم که خروجی میشه 1 نرون با 5 تا ورودی داره
خروجی هر نرون هم تابع tansig هستش.
من اومدم این شبکه رو توی #C شبیه سازی کنم. این کلاس نرون منه:
public class Neuron
{
public Neuron(){}
public Neuron(int SumOfInputs)
{
m_SumOfInputs = SumOfInputs;
}
public double act(double [] Input, double [] weight, double bias)
{
double tmp = bias;
double t;
for (int i = 0; i < m_SumOfInputs; i++)
{
t= (Input * weight);
tmp += t;
}
m_output = 2/ (1 + Math.Exp(-2*tmp))-1 ;
return m_output;
}
public double m_output;
private int m_SumOfInputs;
};
تابع act میاد خروجی نرون رو حساب میکنه.
من وزن ها رو از متلب گرفتم، وزن لایه ورودی با IW وزن لایه های بعدی با LW و همینطور مقدار بایاس رو با b گرفتم از شبکه و توی سی شارپ سیو کردم به صورت آرایه ای از نوع دابل.
اما من هر ورودی که میدم به برنامه اون خروجی که تو متلب میده رو به من نمیده، اعدادش کاملا متفاوته.
این هم کد شبکه عصبی منه که قراره به لایه ها ورودی ها رو بده:
public double Calculate(double[] inputs)
{
double[] ILay_Outputs = new double[9];
double[] HLay_Outputs = new double[5];
//net 1 ,2
//inputLayer acting
ILay_Outputs[0] = InputLayer[0].act(inputs, IW1, Ib[0]);
ILay_Outputs[1] = InputLayer[1].act(inputs, IW2, Ib[1]);
ILay_Outputs[2] = InputLayer[2].act(inputs, IW3, Ib[2]);
ILay_Outputs[3] = InputLayer[3].act(inputs, IW4, Ib[3]);
ILay_Outputs[4] = InputLayer[4].act(inputs, IW5, Ib[4]);
ILay_Outputs[5] = InputLayer[5].act(inputs, IW6, Ib[5]);
ILay_Outputs[6] = InputLayer[6].act(inputs, IW7, Ib[6]);
ILay_Outputs[7] = InputLayer[7].act(inputs, IW8, Ib[7]);
ILay_Outputs[8] = InputLayer[8].act(inputs, IW9, Ib[8]);
//HiddenLayer acting
HLay_Outputs[0] = HiddenLayer[0].act(ILay_Outputs, HW1, Hb[0]);
HLay_Outputs[1] = HiddenLayer[1].act(ILay_Outputs, HW2, Hb[1]);
HLay_Outputs[2] = HiddenLayer[2].act(ILay_Outputs, HW3, Hb[2]);
HLay_Outputs[3] = HiddenLayer[3].act(ILay_Outputs, HW4, Hb[3]);
HLay_Outputs[4] = HiddenLayer[4].act(ILay_Outputs, HW5, Hb[4]);
//OutputLayer acting
OutputLayer.act(HLay_Outputs, OW, Ob);
return OutputLayer.m_output;
}
کسی از شما دوستان میتونه کمکم کنه بخدا دیگه دارم دیونه میشم!
مرسی از همتون