FANN fann_ - eiichiromomma/CVMLAB GitHub Wiki

(FANN) fann_*

fann_init_weights

Widrow+Nguyenのアルゴリズムを用いて重みを初期化する。

FANN_EXTERNAL void FANN_API fann_init_weights(
  struct fann            *ann,
  struct fann_train_data *train_data
)

学習を高速に行なうための同アルゴリズムを使った初期化でfann_randomize_weightsと用途は同じ。とは言っても必ず上手く行くとは限らず、ランダムな初期値を使った方が上手く行く場合もある。

このアルゴリズムは入力データのレンジが必要なので第二引数にdataを使う。

fann_save

ネットワークを保存する。

  FANN_EXTERNAL int FANN_API fann_save( struct  fann  * ann,
   const  char  * configuration_file )

このファイルにはfann_create_from_fileでネットワークを作成するのに必要な情報が全て保存されている。

fann_set_callback, fann_set_error_logについては環境の違う状態で使われた時に予期せぬ失敗の原因になるので保存されない。 また、学習中に一時的に生じる二乗誤差についても保存されない。

返り値

0が成功。-1が失敗。

fann_stopfunc_enum

学習の終了条件

fann_read_train_from_file

学習データをファイルから読み込む。

  FANN_EXTERNAL struct fann_train_data *FANN_API fann_read_train_from_file(
      const  char  * filename
  )

ファイルのフォーマットは以下の形式にする。

学習データ数 入力の個数 出力の個数
スペース区切りの入力データ
スペース区切りの出力データ
  .
  .
  .

スペース区切りの入力データ
スペース区切りの出力データ

fann_reset_MSE

ネットワークの二乗誤差をリセットする。

  FANN_EXTERNAL void FANN_API fann_reset_MSE( struct  fann  * ann )

失敗ビットもリセットする。

fann_randomize_weights

重みをmin_weightからmax_weightにする。

FANN_EXTERNAL void FANN_API 
		fann_randomize_weights(struct fann *ann,
                              fann_type min_weight,
                              fann_type max_weight)

この関数を使わずに何も指定しない場合は-0.1から0.1

fann_run

入力データをニューラルネットワークに渡し、出力を配列で返す。

  FANN_EXTERNAL fann_type * FANN_API fann_run( struct  fann  * ann,
    fann_type  * input )

配列の数は出力層数と同じ。

fann_print_parameters

ネットワークの全パラメータを表示。

  FANN_EXTERNAL void FANN_API fann_print_parameters( struct  fann  * ann )

fann_print_connections

コンパクトなわかりやすい行列でネットワークの接続を表示する。

  FANN_EXTERNAL void FANN_API fann_print_connections( struct  fann  * ann )

例としてxor問題を(2 2 1)のネットワークで学習した場合の同関数の出力を示す。

  Layer / Neuron 012345
  L   1 / N    3 BBa...
  L   1 / N    4 BBA...
  L   1 / N    5 ......
  L   2 / N    6 ...BBA
  L   2 / N    7 ......

このネットワークは5つのrealニューロンと2つのバイアスニューロンからなる。 7つのニューロンは0から6番が振られる。ニューロンの接続は行列から分かり、"."は接続していないことを示す。アルファベッド文字はa-zでどれだけ接続が強固かを示す。2つの中間層のrealニューロン(layer1のニューロン3、4)は全段のニューロンと接続しており、それは上2行から分かる。出力ニューロンのニューロン6は中間層の3-5のニューロンと接続していることが4行目から分かる。

fann_length_train_data

学習データのパターン数を返す。

  FANN_EXTERNAL unsigned int FANN_API fann_length_train_data(
      struct  fann_train_data  * data
  )

fann_errorfunc_enum

学習で誤差を求めるのに使う関数

  • FANN_ERRORFUNC_LINEAR

    • 標準的な線形関数
  • FANN_ERRORFUNC_TANH

    • tanh関数。低learning rateでは必須で大抵良い結果をもたらす。特に出力が目標から大きく外れているときにアグレッシブに働く。但し、Cascade2を使う際には推奨できない。

fann_destroy_train

学習データのメモリを開放。当然だが学習の後に使うこと。

  FANN_EXTERNAL void FANN_API fann_destroy_train(
      struct  fann_train_data  * train_data
  )

fann_destroy

ネットワーク用に確保していたメモリの開放。

  FANN_EXTERNAL void FANN_API fann_destroy( struct  fann  * ann )