|
分類:[C#]
ポップフィールドネットワークです /*この部分を自分で書く*/等の部分を埋めてください。 条件1 ニューロン数は400 とする。 条件2 扱うデータはすべてバイポーラ型(¡1; 1) とする。 条件3 学習は相関学習を用いる。 条件4 crow, duck, lion, monkey, mouse, penguin の6 つのパターンを記憶させる。 条件5 実行時の引数として入力パターンとノイズを付加する確率を指定できるようにする。(例え ば./a.out 1 10 でパターン1 にノイズを10% 付加したパターンを入力する) 条件6 実行結果はkterm 上で■ や□ を使って表示する。 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> #include <limits.h> #define PatternNo 6 #define DataWidth 20 #define DataHeight 20 #define UnitNo DataWidth*DataHeight #define TimeMax 2 void init_rnd(){ srand((unsigned int)time(NULL)); }
double Random(){ return((double)rand()/RAND_MAX); }
int StepFunc(int net, int pout){
/*この部分を自分で書く */
}
void display_pattern(int out[UnitNo]){ int i;
/*この部分を自分で書く*/
} void read_pattern(int PatternID, char *fname, int pattern[PatternNo][UnitNo]){ int i; FILE *fp;
if((fp=fopen(fname,"r"))==NULL){ printf("read_pattern(): Cannot open \"%s\"\n",fname); exit(1); } for(i=0;i<UnitNo;i++){ fscanf(fp,"%d",&pattern[PatternID][i]); } fclose(fp); } void read_patterns(int pattern[PatternNo][UnitNo]){ read_pattern(0,"crow", pattern); read_pattern(1,"duck", pattern); read_pattern(2,"lion", pattern); read_pattern(3,"monkey", pattern); read_pattern(4,"mouse", pattern); read_pattern(5,"penguin",pattern); } void learn_w(int pattern[PatternNo][UnitNo], int w[UnitNo][UnitNo]){ int p,i,j; /*この部分を自分で書く*/ } void input_pattern(int PatternID, int pattern[PatternNo][UnitNo], int input[UnitNo], double NoiseLevel){ int i,j; /*この部分を自分で書く*/ } void calc_output(int w[UnitNo][UnitNo], int out[UnitNo]){ int i,j; int net; for(i=0;i<UnitNo;i++){ /* この部分を自分で書く */ display_pattern(out); } } int main(int argc, char *argv[]){ int pattern[PatternNo][UnitNo]; int w[UnitNo][UnitNo]; int out[UnitNo]; int PatternID; double NoiseLevel; int t; if(argc!=3){ printf("プログラムの使用方法 : \n"); printf(" ./a.out 入力するパターンの番号(0〜5) ノイズレベル(0〜100)\n"); exit(1); } PatternID = atoi(argv[1]); NoiseLevel = atof(argv[2])/100.0; init_rnd(); read_patterns(pattern); learn_w(pattern,w);
input_pattern(PatternID,pattern,out,NoiseLevel); display_pattern(out); for(t=0;t<TimeMax;t++){ calc_output(w,out); } return 0; }
C言語です。LINUXです この順に作っていくとわかりやすいらしいです。 1. パターンの表示display pattern( ) 2. 相関学習learn w( ) 3. パターンの入力input pattern( ) 4. 出力関数StepFunc( ) 5. 想起calc output( ) できればわかるところだけでものせてください!
|