next up previous contents
Next: funcdef.h Up: 設定ファイル Previous: 設定ファイル

grobal.h

{

/* **** 変更部分 ************************************* */

/* 各素子数の宣言 */
/* 教師信号あり */
#define  Tunit    2     /* 音の長さ・高さが与えられる層 */
#define  Lunit    0     /* 過去の音が与えられる層(偶数個用意) */
#define  Cunit    0     /* ランダムな値が与えられる層 */

/* 教師信号なし */
#define  Nunit    23    /* 内部記憶層 */
#define  Eunit    0     /* 文脈層 */

#define  Filenumber 11  /* ファイル番号 */

#define  Inunit   ( Tunit + Lunit + Cunit + Nunit + Eunit )  /* 入力層 */
#define  Midunit  15                                         /* 中間層 */
#define  Outunit  ( Tunit + Lunit + Cunit + Nunit + Eunit )  /* 出力層 */

/* 共通フラグ */
int  Quant = 0;       /* 量子化するか ( 0 : しない <> それ以外 : する ) */
int  Flag_zero = 0;   /* 学習 : 第一音目に対する内部記憶層を0にするか 
                         想起 : 内部記憶層部分に0を入れて想起するか   */

int  Flag_Elman = 0;  /* 文脈層を用いた場合のフラグ */
int  Flag_NNaibu = 0; /* 内部記憶層の内部記憶層を用いた場合のフラグ */

#ifdef STUDY

/* 学習のフラグ */
int  Flag_noize = 0;        /* 学習時に入力にノイズを与える */
int  Flag_gosaplotnew = 0;  /* 誤差信号の大きさを測定する */
int  Flag_backpro = 3;      /* バックプロパゲーションの遅れ回数(default = 3) */

/* 成功のためのフラグ */
int  Flag_continue = 1;  /* 学習を続けるかどうかのフラグ */
int  Flag_success = 0;   /* 学習が成功した場合のフラグ */

#endif

#ifdef RECALL

/* 想起のフラグ */
int  Flag_random = 0;        /* 内部記憶部分にランダムな値を入れて想起 */
int  Flag_inc = 0;         /* 音の長さ・高さにノイズを入れる */
int  Flag_inout = 0;         /* 内部記憶部分で全て0や一つだけ1.0の設定をする */
int  Flag_teachcut = 0;      /* 音の長さ・高さ部分を入れずに想起 */
int  Flag_view = 1;          /* 出力結果を画面表示する */
int  Flag_weightplot = 1;    /* 結合荷重 - 結合荷重特性を測定する */
int  Flag_weightsearch = 0;  /* 結合荷重の積を測定する */
int  Flag_weightplot02 = 1;  /* 出力値 - 結合荷重特性を測定する */
int  Flag_caos = 0;          /* カオスニューロンを用いた想起を行なう */

int  Set_zero = 0;  /* 部分的に0を入れるための変数 */
int  Set_inout = 0; /* 一箇所だけ1.0を入れる */

#endif
/***** ここまで **************************************/

/***** 共通変数 **************************************/

#define  TL    ( Tunit + Lunit )
#define  TLC   ( Tunit + Lunit + Cunit )
#define  TLCN  ( Tunit + Lunit + Cunit + Nunit )

/* 時系列の個数 */
#define  Smax  256
#define  Time  40

/* 量子化レベル */
#define  Kaisou ( 10 + 1 )  /* レベル数 */
#define  Zoubun 0.1         /* 1レベルの値 */

#define  Seed  1  /* 乱数の種 */
#define  Bai   1  /* Etaの倍数(内部記憶部分だけ学習を強化させる) */

#define  Gakusyu    10000    /* 基本学習回数 */
#define  Saidai     1000000  /* 最大学習回数 */
#define  Souki      2000     /* 想起回数 */

/* ランダムな値を設定する */
#define  Lhigh   1.0  /* 内部記憶の出力値 */
#define  Llow    0.0
#define  qrand() ( drand48() * ( Lhigh - Llow ) + Llow )

#define Nhigh       0.05  /* 音の長さ */
#define Nlow        -0.05
#define lenrand()   ( drand48() * ( Nhigh - Nlow ) + Nlow )

#define Hhigh       0.00625  /* 音の高さ */
#define Hlow        -0.00625
#define heirand()   ( drand48() * ( Hhigh - Hlow ) + Hlow )

#define fsig( in ) ( 1 / ( 1 + exp( -( in ))) )   /* シグモイド関数 */
#define frev( in ) ( log( ( in ) / ( in - 1 ) ) ) /* 音の長さの関数 */

/* 結合荷重 */
double  wim[Midunit][Inunit];  /* 入力層〜中間層 */
double  wmo[Outunit][Midunit]; /* 中間層〜出力層 */

/* 閾値 */
double  sikiiim[Midunit];      /* 中間層素子 */
double  sikiimo[Outunit];      /* 出力層素子 */

/* 各入出力値 */
double  inout[Inunit][Time];   /* 入力層へ入力される */
double  midout[Midunit];       /* 中間層へ入力される */
double  outout[Outunit];       /* 出力層から出力される */

int  tsmax;  /* 実際の時系列の長さ */
int  k;      /* 計算回数の変数 */
int  kk;     /* 計算回数の最大 */
int  t;      /* 現在の時間の変数 */
int  r;      /* 現在の計算回数の合計 */

double  inkeep[Inunit][Time]; /* 実際に教師信号が入る */
double  outkeep[Outunit];     /* 出力値を保持する */

char  *Data      = "saita";   /* 教師信号ファイル名 */
char  *fi_weight = NULL;

char    fiplot[Smax];
char    fisong[Smax];
char    finaibu[Smax];
FILE  *fpplot;
FILE  *fpsong;
FILE  *fpnaibu;

/***** 学習に使う変数 **************************************/
#ifdef STUDY

double  Eta = 0.5;     /* 学習係数 */
double  Alpha = 0.005; /* 加速項 */
double  Eta2;          /* 内部記憶部分に与えられる学習係数 */

/* 各層重みの変化分 */
double  dwim[Midunit][Inunit];
double  dwmo[Outunit][Midunit];

/* 伝搬される誤差信号 */
double  dim[Midunit];
double  dmo[Outunit];

/* しきい値の変化分 */
double  dsikiiim[Midunit];
double  dsikiimo[Outunit];

/* 結合荷重をランダムで決める */
#define Rhigh           0.30
#define Rlow            -0.30
#define urand()         ( drand48() * ( Rhigh - Rlow ) + Rlow )

double  midkeep[Midunit];  /* t-1 の中間層への入力 */
double  midkeep2[Midunit]; /* t-2 の中間層への入力 */
double  midkeep3[Midunit]; /* t-3 の中間層への入力 */

double  outkept[Outunit][Time];

double  outkeep2[Outunit];
double  outkeep3[Outunit];

double  gosa[Outunit][Time];
double  kekka[Outunit];

double  cyclekeep[Inunit][Time];
double  noisein[Tunit][Time];
double  gosakeep[Tunit];
double  gosasumcloseteach , gosasumcloseall;
double  gosasumopenteach , gosasumopenall;
double  dmoteach[TLC];
double  dmonaibu[Nunit];
double  dimlate[Midunit] , dimlate2[Midunit]; /* 誤差信号 */
double  dimget[Midunit];

int chsuccess,chfault;

FILE    *fi;
FILE    *fprecall;
FILE    *fpin;
FILE    *fpnaibucheck;
FILE    *fpnaibu2,*fpnaibu4;
FILE    *fpout;
FILE    *fpfirst;
FILE    *fpsumplot;
FILE    *fpdimplot;
char    figosa[Smax];
char    firecall[Smax];
char    fiin[Smax];
char    finaibucheck[Smax];
char    finaibu2[Smax],finaibu4[Smax];
char    fiout[Smax];
char    fifirst[Smax];
char    fisumplot[Smax];
char    fidimplot[Smax];

#endif

/****** 想起に使う変数 *************************************/
#ifdef RECALL

double  song[Tunit][Time];
double  songkeep[Tunit][Time];
double  Noize;

double  em[Midunit] , old_em[Midunit];
double  zm[Midunit] , old_zm[Midunit];
double  km , kr , al;
double  old_midout[Midunit];

int     over , under;

char  fiweight_tm[Smax];
char  fiweight_nm[Smax];
char  fiweight_mt[Smax];
char  fiweight_mn[Smax];
FILE  *fpweight_tm;
FILE  *fpweight_nm;
FILE  *fpweight_mt;
FILE  *fpweight_mn;

char  fiweight02_tm[Smax];
char  fiweight02_nm[Smax];
char  fiweight02_mt[Smax];
char  fiweight02_mn[Smax];
FILE  *fpweight02_tm;
FILE  *fpweight02_nm;
FILE  *fpweight02_mt;
FILE  *fpweight02_mn;

#endif



Toshinori DEGUCHI
2003年 4月11日 金曜日 11時42分54秒 JST