ページ 11

C言語でホップフィールドネットワーク

Posted: 2011年7月06日(水) 09:33
by 草野 優雨
いろいろやってみたのですがまったくわかりません。
提出期限も近いので、できれば教えていただきたいのですが。
何を入れてもエラーで認識されないので・・・
ヒントの意味もよくわかりません。できれば、解説なども載ってるサイトか、解説をお願いしたいのですが。
ポップフィールドネットワークです
/*この部分を自分で書く*/等の部分を埋めてください。
条件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]);
}
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言語です
この順に作っていくとわかりやすいらしいです。
1. パターンの表示display pattern( )
2. 相関学習learn w( )
3. パターンの入力input pattern( )
4. 出力関数StepFunc( )
5. 想起calc output( )
できればわかるところだけでものせてください!

Re: C言語でホップフィールドネットワーク

Posted: 2011年7月06日(水) 09:54
by bitter_fox
草野 優雨 さんが書きました:いろいろやってみたのですがまったくわかりません。
提出期限も近いので、できれば教えていただきたいのですが。
何を入れてもエラーで認識されないので・・・
http://dixq.net/forum/viewtopic.php?f=3&t=8824
こちらとほぼ同じですよね?トピックを乱立しないでください。

いろいろやってみたとのことですが、どういったことをやったのでしょうか?
もしそのやってみた際に出来たソースコードがあれば載せてください。
このことについてもフォーラムルールにしっかりと記されていますので確認してください。

提出期限についても詳しく教えてください。これもフォーラムルールに記されているので参照してください。

また、どういった入力があるのかや出力・目的などが不明確で答えようがありません。

Re: C言語でホップフィールドネットワーク

Posted: 2011年7月06日(水) 10:50
by 沖 滉均
課題丸投げについても、同トピを立てている件についてもbitter_foxさんが指摘されている通りフォーラムルールを確認してくださいね。

講義資料をざっと読ませていただきましたが、第3回の講義を受けていれば分かる内容のようですね。
また、課題のベースとなるソースコードには
この部分を自分で書くとなっている部分には直前に何をやれば良いかがコメントで書かれているようですね
ご自分でこの部分は読まれましたか?

まず、何を入れてもエラーになったというご自身で書かれたコードを載せていただけますか?
それについてどのような問題があるのかをアドバイスすることはできますが、答えを教えることはできません。

条件4 crow, duck, lion, monkey, mouse, penguin の6 つのパターンを記憶させる。
この条件については、プログラミング課題情報として配布されている入力ファイルが必要になりますよね。

何度もしつこいようですがフォーラムルールを確認し、ご自身で書かれたコードを書いてください。

Re: C言語でホップフィールドネットワーク

Posted: 2011年7月15日(金) 11:25
by ホップフィールドマスター
(規約に反する投稿だったため、管理人が削除しました)