Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2012, 15:08   #1
ivan9095
Новичок
Джуниор
 
Регистрация: 15.05.2012
Сообщений: 1
По умолчанию Нейронные сети. Алгоритм обратного распространения ошибки

Такая проблема есть код, но в нем нет обучения, его нужно добавить я не знаю как) Помогите пожалуйста кто может.

#include "stdafx.h"
#include <math.h>
#include <iostream>
using namespace std;
const int N=12;
const int N2=8;
const int numlayer=1;
int k1=0, k2=0, l;
float f=0.6,s=0.7;
double X[N]={-1.20,0.80,-1.60,-4.03,1.42,-1.60,0.92,1.03,-1.76,-2.02,1.25,-1.6};
double W[N2][numlayer]=
{
-1.20,0.80,-1.60,-4.03,1.42,-1.60,0.92,1.03
};
const double error=1.5;
const double speed=0.05;
int main()
{ setlocale(0,"rus");
double getnet(double*,double[][numlayer]);
void display(double);
double getout(double);
double geterr(double,double);
double newW(double,double,double);
double out;
do{
cout<<"Start weight: ";
for(int i=0;i<N2;i++)
for(int j=0;j<numlayer;j++)
cout<<W[i][j]<<" ";
cout<<endl;
double net=getnet(X,W);
out=getout(net);
double err=geterr(error,net);
if (out<f)k2=k2+1;
if (out<s)k1=k1+1;
cout<<"Out: ";display(net);

cout<<"Error: ";display(err);
newW(error,speed,out);
for(int i=0;i<N2;i++)
for(int j=0;j<numlayer;j++)
cout<<W[i][j]<<" ";

}while(out>0.60);
if(out>1)

cout<<"\n Won first class"<<endl;

else

cout<<"\n Won second class"<<endl;
cout<<endl;

cout<<"func activation: ";display(out);

cout<<"oshibki 1 klassa: ";display(k1);
cout<<"oshibki 2 klassa: ";display(k2);
system("pause");


return 0;

}
double getnet(double* X,double W[][numlayer])
{ double net=0.0;
for(int i=0;i<N2;i++)
for(int j=0;j<numlayer;j++)
net+=X[i]*W[i][j];
return net;
}
double getout(double net)
{
return (1/(1+exp(-net)));
}
double geterr(double err,double net)
{
return (err-net)*net*(1-net);
}
double newW(double err,double speed,double out)
{
double neww=speed*err*out;
cout<<"Koefficient obnovlenya vesa: "<<neww<<endl;
cout<<"Obnovlennie vesa: ";
for(int i=0;i<N2;i++)
for(int j=0;j<numlayer;j++)
W[i][j]+=neww;
return W[N2][numlayer];
}
void display(double num)
{
cout<<num<<endl;
}
ivan9095 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нейронные сети Nina+ Общие вопросы по программированию, компьютерный форум 3 23.05.2012 19:47
Нейронные сети Sanchos Помощь студентам 5 09.08.2011 17:47
программа для изучения нейросетей -метод обратного распространения maximp Фриланс 1 10.11.2010 18:11
Нейронные сети. Asblue Помощь студентам 4 09.11.2010 08:13
Нейронные сети russian-stalker Свободное общение 8 26.08.2010 21:57