일부 변경하면 일반적인 경우에 사용 가능함
X = [1 -1 -1], 목표값 -1 일 때, 퍼셉트론 학습 알고리즘에 따라 가중치 변경
초기 가중치는 [0.1 -0.1 0.1]로 한다. 학습률은 1로 가정한다.
예제 풀면서 공부 중인데 손으로 하나하나 숫자 계산하기 싫어서 만들어봄.
#include<iostream>
#include<vector>
using namespace std;
double multiply_matrix(vector<double> X, vector<double> W){
double NET=0;
for(int i=0 ; i<(int)X.size() ; i++){
NET=NET+(X[i]*W[i]);
}
return NET;
}
int f(double NET, double T){
if(NET>T){
return 1;
} else if(NET==T) {
return 0;
} else {
return -1;
}
}
void learning(vector<double> &X, vector<double> &W, vector<double> &dW,
double &NET, int &y, double &T, double &alpha, int &desired_output){
do{
NET=multiply_matrix(X, W);
y=f(NET, T);
if(y!=desired_output){
dW.clear();
for(int i=0 ; i<(int)W.size() ; i++){
dW.push_back(alpha*(desired_output-y)*X[i]);
W[i]=W[i]+dW[i];
}
}
NET=multiply_matrix(X,W);
y=f(NET, T);
}while(y!=desired_output);
}
int main(){
double NET=0;
int y=0;
vector<double> X;
int desired_output=-1;
vector<double> W;
vector<double> dW;
X.push_back(1);
X.push_back(-1);
X.push_back(-1);
W.push_back(0.1);
W.push_back(-0.1);
W.push_back(0.1);
double T=0;
double alpha=1;
learning(X, W, dW, NET, y, T, alpha, desired_output);
cout<<"W = ["<<W[0]<<" "<<W[1]<<" "<<W[2]<<"] d = "<<desired_output<<" y = "<<y<<endl;
return 0;
}
'노트정리 > 인공지능·데이터' 카테고리의 다른 글
| SAS로 풀 수 있는 네트워크와 알고리즘 문제 (0) | 2015.01.29 |
|---|---|
| SAS university edition에서 라이브러리 할당. (10) | 2015.01.05 |
| 교수님과 학생을 위한 SAS University Edition 무료 소프트웨어 출시 (0) | 2015.01.04 |
| SAS 한글판으로 설치했을 때 영어판으로 실행하면 발생하는 에러 (0) | 2014.07.10 |
| 뉴로컴퓨터개론 공부 현황 (0) | 2013.12.19 |
| 요새 관심사 (0) | 2013.12.10 |
| 한글판 SPSS에서 Latin Square Design 분석하기 (0) | 2013.11.28 |
| SPSS에서 분산분석하기 (ANOVA table 만들기) (0) | 2013.11.07 |
소스.cpp

