FANN

<?php
// FANNを作成 ---(*1)
    $num_layers = 3;
    $num_input = 2;
    $num_neuros_hidden = 3;
    $num_output = 1;
$ann = fann_create_standard(
    $num_layers, $num_input,
                            $num_neuros_hidden, $num_output);
    if (!$ann){ die("FANNの初期化に失敗"); }
    
    // パラメーターを設定 ---(*2)
    fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
    fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);

// 学習する ---(*3)
// xor のデータファイルを読み込む
    $desired_error = 0.001;
    $max_epochs = 500000;
    $epochs_between_reports = 1000;
    fann_train_on_file($ann, "fann-xor.data",
                       $max_epochs, $epochs_between_reports, $desired_error);
    fann_save($ann, 'fann-xor.net');

// 学習したデータをテスト
    echo "学習結果をテスト:\n";
    $xor_pattern = &#91;&#91;1,1&#93;,&#91;1,0&#93;,&#91;0,1&#93;,&#91;0,0&#93;&#93;;
    foreach ($xor_pattern as $t){
        $r = fann_run ($ann, $t);
        $v = round($r&#91;0&#93;);
        printf("%d %d => %d (%f)\n", $t[0], $t[1], $v, $r[0]);
    }
    fann_destroy($ann);