データ構造 | |
struct | F_NN_COND |
ニューラルネットワーク階層毎の生成条件設定用構造体 [詳細] | |
列挙型 | |
enum | f_nn_func_type { F_NN_LINEAR_FUNC, F_NN_SIGMOID_FUNC, F_NN_TANH_FUNC } |
ニューラルネットワーク応答関数指定 [詳細] | |
関数 | |
FHANDLE FVALGAPI | fnFIE_neuro_create (const F_NN_COND *layer_cond, INT layer_num) |
ニューラルネットワークの生成 | |
INT FVALGAPI | fnFIE_neuro_set_coeff (FHANDLE hneuro, DOUBLE epsilon, DOUBLE beta) |
ニューラルネットワークの結合負荷の修正時の各種係数の設定 | |
INT FVALGAPI | fnFIE_neuro_get_coeff (FHANDLE hneuro, DOUBLE *epsilon, DOUBLE *beta) |
ニューラルネットワークの結合荷重の修正時の各種係数の取得 | |
INT FVALGAPI | fnFIE_neuro_learning (FHANDLE hneuro, const DOUBLE *vect_inp, const DOUBLE *vect_tch, DOUBLE *error) |
ニューラルネットワークの学習(確率的バックプロパゲーション法) | |
INT FVALGAPI | fnFIE_neuro_recognition (FHANDLE hneuro, const DOUBLE *vect_inp, DOUBLE *vect_out) |
ニューラルネットワークでの認識 | |
INT FVALGAPI | fnFIE_neuro_performance (FHANDLE hneuro, const DOUBLE *vect_inp, const DOUBLE *vect_tch, DOUBLE *error) |
ニューラルネットワークの学習性能の取得 | |
INT FVALGAPI | fnFIE_neuro_get_count (FHANDLE hneuro, INT *count) |
ニューラルネットワークの学習回数の取得 | |
INT FVALGAPI | fnFIE_neuro_get_layer (FHANDLE hneuro, INT *layer_num) |
ニューラルネットワークの階層数の取得 | |
INT FVALGAPI | fnFIE_neuro_get_neuron (FHANDLE hneuro, INT *neuron_num) |
ニューラルネットワークの各階層のニューロン数の取得 | |
FHANDLE FVALGAPI | fnFIE_neuro_load (fvstream *strm) |
ニューラルネットワークデータのストリーム読み込み | |
INT FVALGAPI | fnFIE_neuro_save (FHANDLE hneuro, fvstream *strm) |
ニューラルネットワークデータのストリーム書き込み |
enum f_nn_func_type |
FHANDLE FVALGAPI fnFIE_neuro_create | ( | const F_NN_COND * | layer_cond, | |
INT | layer_num | |||
) |
ニューラルネットワークの生成
ニューラルネットワークオブジェクトを生成します。
layer_cond は、各階層の条件を設定します。 layer_num で設定した階層数分を入力してください。 なお layer_cond は、3層以上( 3 ≦ layer_num )であることが前提となります。
F_NN_COND 構造体 layer_cond->func_param には、0.0 より大きい値を設定してください。 また対象によって異なりますが、この layer_cond->func_param に設定する値の目安は、 線形出力関数の場合1.0、シグモイド関数の場合1.0、双曲線正接の場合0.1 程度です。 ただし、階層毎にパラメータチェックはしていません。 例えば、応答関数の種類が不正な場合の動作は保証しません。
本関数で生成したオブジェクトは不要になったら fnFIE_free_object() にて解放してください。
[in] | layer_cond | 各階層毎の生成条件の配列 layer_num 分の要素を確保した配列です。
|
[in] | layer_num | 階層数( layer_cond の要素数 ) |
INT FVALGAPI fnFIE_neuro_set_coeff | ( | FHANDLE | hneuro, | |
DOUBLE | epsilon, | |||
DOUBLE | beta | |||
) |
ニューラルネットワークの結合負荷の修正時の各種係数の設定
ニューラルネットワークの学習時、すなわち、シナプス結合荷重修正時に必要な各種のパラメータを設定します。
[in,out] | hneuro | ニューラルネットワークオブジェクトのハンドル |
[in] | epsilon | 結合荷重の修正時の学習係数ε(0.0〜1.0) |
[in] | beta | 結合荷重の修正時の忘却係数β(0.0〜1.0) |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_OBJECT | 不正なオブジェクトが渡された | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_neuro_get_coeff | ( | FHANDLE | hneuro, | |
DOUBLE * | epsilon, | |||
DOUBLE * | beta | |||
) |
ニューラルネットワークの結合荷重の修正時の各種係数の取得
ニューラルネットワークの学習時、すなわち、シナプス結合荷重修正時に必要な各種のパラメータを取得します。
[in] | hneuro | ニューラルネットワークオブジェクトのハンドル |
[out] | epsilon | 結合荷重の修正時の学習係数ε(0.0〜1.0) |
[out] | beta | 結合荷重の修正時の忘却係数β(0.0〜1.0) |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_OBJECT | 不正なオブジェクトが渡された | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_neuro_learning | ( | FHANDLE | hneuro, | |
const DOUBLE * | vect_inp, | |||
const DOUBLE * | vect_tch, | |||
DOUBLE * | error | |||
) |
ニューラルネットワークの学習(確率的バックプロパゲーション法)
ニューラルネットワークの学習、すなわち、シナプス結合荷重修正を行います。
[in,out] | hneuro | ニューラルネットワークオブジェクトのハンドル |
[in] | vect_inp | 入力ベクトル |
[in] | vect_tch | 教師ベクトル |
[out] | error | 教師ベクトルとの誤差 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_OBJECT | 不正なオブジェクトが渡された | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_neuro_recognition | ( | FHANDLE | hneuro, | |
const DOUBLE * | vect_inp, | |||
DOUBLE * | vect_out | |||
) |
ニューラルネットワークでの認識
学習済みのニューラルネットワークを使って認識を行います。 与えられた入力ベクトルに対し、指定されたニューラルネットワークを使い認識を行います。 結果を出力ベクトルへ反映させます。
[in,out] | hneuro | ニューラルネットワークオブジェクトのハンドル |
[in] | vect_inp | 入力ベクトル |
[out] | vect_out | 出力ベクトル |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_OBJECT | 不正なオブジェクトが渡された | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_neuro_performance | ( | FHANDLE | hneuro, | |
const DOUBLE * | vect_inp, | |||
const DOUBLE * | vect_tch, | |||
DOUBLE * | error | |||
) |
ニューラルネットワークの学習性能の取得
ニューラルネットワークに入力データおよび教師データを与えて、そのときの誤差を取得します。 fnFIE_neuro_learning() に似ていますが、本関数では学習を行うことなく誤差量を算出します。
[in,out] | hneuro | ニューラルネットワークオブジェクトのハンドル |
[in] | vect_inp | 入力ベクトル |
[in] | vect_tch | 教師ベクトル |
[out] | error | 教師ベクトルとの誤差 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_OBJECT | 不正なオブジェクトが渡された | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_neuro_get_count | ( | FHANDLE | hneuro, | |
INT * | count | |||
) |
ニューラルネットワークの学習回数の取得
これまでにニューラルネットワークが学習した回数を取得します。
[in] | hneuro | ニューラルネットワークオブジェクトのハンドル |
[out] | count | 学習回数 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_OBJECT | 不正なオブジェクトが渡された | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_neuro_get_layer | ( | FHANDLE | hneuro, | |
INT * | layer_num | |||
) |
ニューラルネットワークの階層数の取得
ニューラルネットワークの階層数を取得します。
[in] | hneuro | ニューラルネットワークオブジェクトのハンドル |
[out] | layer_num | 階層数 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_OBJECT | 不正なオブジェクトが渡された | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_neuro_get_neuron | ( | FHANDLE | hneuro, | |
INT * | neuron_num | |||
) |
ニューラルネットワークの各階層のニューロン数の取得
ニューラルネットワークの各階層のニューロン数を取得します。
[in] | hneuro | ニューラルネットワークオブジェクトのハンドル |
[out] | neuron_num | 各階層のニュ−ロン数を保持する配列
|
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_OBJECT | 不正なオブジェクトが渡された | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
FHANDLE FVALGAPI fnFIE_neuro_load | ( | fvstream * | strm | ) |
ニューラルネットワークデータのストリーム読み込み
ニューラルネットワークを、指定のデータストリームから読み込みます。
本関数で生成したオブジェクトは不要になったら fnFIE_free_object() にて解放してください。
[out] | strm | データストリーム |
// エラー処理は省略しているので注意して下さい。 #include <stdio.h> #include "oal_aloc.h" #include "fie.h" /* ファイル書き込み用関数 */ static INT write_data( VOID *data, INT sz, VOID* strm ) { return fwrite( data, 1, sz, (FILE*)strm ); } /* ファイル読込用関数 */ static INT read_data( VOID *data, INT sz, VOID* strm ) { return fread( data, 1, sz, (FILE*)strm ); } INT main() { FHANDLE hnn1 = NULL, hnn2 = NULL; fvstream strm; // データストリーム F_NN_COND cond[3]; // 各階層毎の生成条件の配列 INT i; DOUBLE *vect_inp = NULL; // 入力ベクトル DOUBLE *vect_tch = NULL; // 教師ベクトル DOUBLE vect_out; // 出力ベクトル DOUBLE error; // 教師ベクトルとの誤差 DOUBLE data_tbl[4][3]= { { 0.0, 0.0, 0.0 }, { 0.0, 1.0, 1.0 }, { 1.0, 0.0, 1.0 }, { 1.0, 1.0, 0.0 } }; // 入力ベクトル、教師ベクトル初期化用テーブル const INT DEF_LAYER_N = 3; // レイヤー数 const INT INPUT_NEURON = 2; // 入力レイヤーのニューロン数 const INT HIDDEN_NEURON = 2; // 中間レイヤーのニューロン数 const INT OUTPUT_NEURON = 1; // 出力レイヤーのニューロン数 const DOUBLE EPSILON = 0.8; // 結合荷重の修正時の学習係数 const DOUBLE BETA = 0.02; // 結合荷重の修正時の忘却係数 const INT LEARN_COUNT = 4000; // 学習数 // FIEライブラリの使用前に必ずコールする必要があります。 fnFIE_setup(); // ストリームの準備 strm.read = read_data; strm.write = write_data; strm.stream = NULL; // 生成条件の初期化 cond[0].elem_num = INPUT_NEURON; cond[0].func_type = F_NN_LINEAR_FUNC; cond[0].func_param = 1.0; cond[1].elem_num = HIDDEN_NEURON; cond[1].func_type = F_NN_SIGMOID_FUNC; cond[1].func_param = 1.0; cond[2].elem_num = OUTPUT_NEURON; cond[2].func_type = F_NN_SIGMOID_FUNC; cond[2].func_param = 1.0; vect_inp = (DOUBLE *)fnOAL_malloc( INPUT_NEURON * LEARN_COUNT * sizeof(DOUBLE) ); vect_tch = (DOUBLE *)fnOAL_malloc( OUTPUT_NEURON * LEARN_COUNT * sizeof(DOUBLE) ); // 入力ベクトル、教師ベクトルの初期化 for( i = 0; i < LEARN_COUNT; i++ ){ *(vect_inp + (2*i)) = data_tbl[i%4][0]; *(vect_inp + (2*i+1)) = data_tbl[i%4][1]; *(vect_tch + i) = data_tbl[i%4][2]; } // ニューラルネットワークの生成 hnn1 = fnFIE_neuro_create( cond, DEF_LAYER_N ); // 結合負荷の修正時の各種係数の設定 fnFIE_neuro_set_coeff( hnn1, EPSILON, BETA ); // 学習 for( i = 0; i < LEARN_COUNT; i++ ) fnFIE_neuro_learning( hnn1, (vect_inp + (2*i)), (vect_tch + i), &error ); // 認識 fnFIE_neuro_recognition( hnn1, vect_inp, &vect_out ); // ファイル書き込み strm.stream = fopen( "test_fie_neuro.dat", "wb" ); fnFIE_neuro_save( hnn1, &strm ); fclose( (FILE*)strm.stream ); strm.stream = NULL; // ファイルの読み込み strm.stream = fopen( "test_fie_neuro.dat", "rb" ); hnn2 = fnFIE_neuro_load( &strm ); fclose( (FILE*)strm.stream ); strm.stream = NULL; fnFIE_free_object( hnn1 ); fnFIE_free_object( hnn2 ); fnOAL_free( vect_inp ); fnOAL_free( vect_tch ); // 終了処理 fnFIE_teardown(); return 0; }
INT FVALGAPI fnFIE_neuro_save | ( | FHANDLE | hneuro, | |
fvstream * | strm | |||
) |
ニューラルネットワークデータのストリーム書き込み
ニューラルネットワークを、指定のデータストリームに書き込みます。
[in] | hneuro | ニューラルネットワークオブジェクトのハンドル |
[out] | strm | データストリーム |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_OBJECT | 不正なオブジェクトが渡された | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |