ニューラルネットワーク
[ビジョンツール]


データ構造

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)
 ニューラルネットワークデータのストリーム書き込み

列挙型

ニューラルネットワーク応答関数指定

列挙型の値:
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 
)

ニューラルネットワークの生成

ニューラルネットワークオブジェクトを生成します。

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 分の要素を確保した配列です。
  • (バイアス素子を除く)素子数( elem_num )
  • 応答関数の種類( func_type )
    • F_NN_LINEAR_FUNC:線形出力関数
    • F_NN_SIGMOID_FUNC:シグモイド(ロジスティック)関数
    • F_NN_TANH_FUNC:双曲線正接関数
  • 応答関数のパラメータ( func_param )
[in] layer_num 階層数( layer_cond の要素数 )
戻り値:
正常に終了した場合は、ニューラルネットワークオブジェクトのハンドルを返します。 ライセンスエラー、未初期化エラー、メモリ不足や不正なパラメータを与えた場合には、NULLを返します。

INT FVALGAPI fnFIE_neuro_set_coeff ( FHANDLE  hneuro,
DOUBLE  epsilon,
DOUBLE  beta 
)

ニューラルネットワークの結合負荷の修正時の各種係数の設定

ニューラルネットワークの学習時、すなわち、シナプス結合荷重修正時に必要な各種のパラメータを設定します。

  • epsilon は、シナプス結合荷重修正時の学習係数εです。 0.0〜1.0 の値で設定してください。 この値が大きい程、学習が速くなりますが、ローカルミニマム解(簡単にいえば、誤記憶)になりやすくなります。
  • beta は、シナプス結合荷重修正時の忘却係数βです。 0.0〜1.0 の値で設定してください。 この値が大きい程、一旦憶えたものを忘れる確率が高くなります。
引数:
[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 ライセンスエラー、または未初期化エラー
参照:
fnFIE_neuro_get_coeff()

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 ライセンスエラー、または未初期化エラー
参照:
fnFIE_neuro_set_coeff()

INT FVALGAPI fnFIE_neuro_learning ( FHANDLE  hneuro,
const DOUBLE *  vect_inp,
const DOUBLE *  vect_tch,
DOUBLE *  error 
)

ニューラルネットワークの学習(確率的バックプロパゲーション法)

ニューラルネットワークの学習、すなわち、シナプス結合荷重修正を行います。

  • vect_inp は学習時の入力データです。 入力層の要素数以上の要素を確保してください。 入力層の要素数は、 fnFIE_neuro_create() で指定した layer_cond[0].elem_num のことです。
  • vect_tch は学習時の教師データです。 出力層の要素数以上の要素を確保してください。 出力層の要素数は、 fnFIE_neuro_create() で指定した layer_cond[ layer_num - 1 ].elem_num のことです。
本関数は、返される error の値が小さな値になるまで、入力データを変えながら繰り返し呼ぶ必要があります。 対象とするデータによって異なりますが、 error が小さくなったと判定する目安は、0.03です。

引数:
[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 
)

ニューラルネットワークでの認識

学習済みのニューラルネットワークを使って認識を行います。 与えられた入力ベクトルに対し、指定されたニューラルネットワークを使い認識を行います。 結果を出力ベクトルへ反映させます。

  • vect_inp は認識したい入力データです。 入力層の要素数以上の要素を確保してください。 入力層の要素数は、 fnFIE_neuro_create() で指定した layer_cond[0].elem_num のことです。
  • vect_out は認識結果の出力データです。 出力層の要素数以上の要素を確保してください。 出力層の要素数は、 fnFIE_neuro_create() で指定した layer_cond[ layer_num - 1 ].elem_num のことです。
引数:
[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() に似ていますが、本関数では学習を行うことなく誤差量を算出します。

  • vect_inp は学習時の入力データです。 入力層の要素数以上の要素を確保してください。 入力層の要素数は、 fnFIE_neuro_create() で指定した layer_cond[0].elem_num のことです。
  • vetc_tch は学習時の教師データです。 出力層の要素数以上の要素を確保してください。 出力層の要素数は、 fnFIE_neuro_create() で指定した layer_cond[ layer_num - 1 ].elem_num のことです。
引数:
[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 データストリーム
戻り値:
正常に終了した場合は、ニューラルネットワークオブジェクトのハンドルを返します。 ライセンスエラー、未初期化エラー、メモリ不足や不正なパラメータを与えた場合には、NULLを返します。
使用例
// エラー処理は省略しているので注意して下さい。
#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 
)

ニューラルネットワークデータのストリーム書き込み

ニューラルネットワークを、指定のデータストリームに書き込みます。

使用例
fnFIE_neuro_load() の例を参照してください。
引数:
[in] hneuro ニューラルネットワークオブジェクトのハンドル
[out] strm データストリーム
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT 不正なオブジェクトが渡された
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_NOMEMORY メモリ不足
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー


Documentation copyright © 2009-2024 FAST Corporation.
Generated on Fri Aug 9 16:38:48 2024 for FIEライブラリ by doxygen 1.5.6-FASTSP-p2