fann_create_train_from_callback

(PECL fann >= 1.0.0)

fann_create_train_from_callbackCreates the training data struct from a user supplied function

Описание

resource fann_create_train_from_callback ( int $num_data , int $num_input , int $num_output , callable $user_function )

Creates the training data struct from a user supplied function. As the training data are numerable (data 1, data 2...), the user must write a function that receives the number of the training data set (input, output) and returns the set.

Список параметров

num_data

The number of training data

num_input

The number of inputs per training data

num_output

The number of ouputs per training data

user_function

The user supplied function with following parameters:

  • num - The number of the training data set
  • num_input - The number of inputs per training data
  • num_output - The number of ouputs per training data

The function should return an associative array with keys input and output and two array values of input and output.

Возвращаемые значения

Возвращает ресурс (resource) обучающих данных, или FALSE в случае ошибки.

Примеры

Пример #1 fann_create_train_from_callback() example

<?php
function create_train_callback($num_data$num_input$num_output) {
    return array(
        
"input" => array_fill(0$num_input1),
        
"output" => array_fill(0$num_output1),
    );
}

$num_data 3;
$num_input 2;
$num_output 1;
$train_data fann_create_train_from_callback($num_data$num_input$num_output"create_train_callback");
if (
$train_data) {
    
// Do something with $train_data
}
?>

Смотрите также

Коментарии

This code can be used to read training data from MySQL rather than a text file.

<?php

// MySQL for This Example:
/*
CREATE TABLE `TrainingSets` (
  `ID` int(11) NOT NULL,
  `Name` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
  `TrainingData` text COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ALTER TABLE `TrainingSets` ADD PRIMARY KEY (`ID`);
 
INSERT INTO `TrainingSets` (`ID`, `Name`, `TrainingData`) VALUES(1, 'XOR', '-1 -1\n-1\n-1 1\n1\n1 -1\n1\n1 1\n-1');

ALTER TABLE `TrainingSets` MODIFY `ID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
*/

// This function calls pulls the TrainingData from MySQL
function get_training_data_from_db($id) {
   
$table_name "TrainingSets";
   
$field "TrainingData";
   
$connection=mysqli_connect("host","username","password","database"); // change to your DB credentials
   
$result=mysqli_query($connection,"SELECT $field FROM $table_name");
   
$data=mysqli_fetch_assoc($result);
   
mysqli_close($connection);

    return 
$data[$field];
}

// This function prepares the newline delimited data to be handed off to FANN
/*
Example of "newline delimited data" (like XOR in a Plain Text File) stored in MySQL:
-1 -1
-1
-1 1
1
1 1
-1
1 -1
1
*/
function prepare_data_from_db($training_data) {
   
$training_data explode"\n"$training_data ); // convert training data rows to array
   
$num_data count($training_data);
   
   
// Sift the data and split inputs and outputs 
   
for($i=0;$i<$num_data;$i++) {
      if(
$i 2) { // $training_data[$i] is Output
       
$training_data['outputs'][] = explode" "$training_data[$i]);
      }else{ 
// $training_data[$i] is Input
       
$training_data['inputs'][] = explode" "$training_data[$i]);
      }
    }
   
// remove the unsifted data
   
foreach ($training_data as $key => $value) {
        if (
is_numeric($key)) {
            unset(
$training_data[$key]);
        }
    }
    return 
$training_data// returned the prepaired associative array
}

// This function hands the prepared data over to FANN
function create_train_callback($num_data$num_input$num_output) {
    global 
$training_data;
    global 
$current_dataset;
   
   
$dataset = array("input" => $training_data['inputs'][$current_dataset],
                   
"output" => $training_data['outputs'][$current_dataset]);
   
$current_dataset++;

    return 
$dataset;
}

// Initialize the program variables
$record_id 1// the 'ID' for the training data in MySQL
$current_dataset 0;
$num_input 2;
$num_output 1;
$num_layers 3;
$num_neurons 3;
$desired_error 0.001;
$max_epochs 500000;
$epochs_between_reports 1000;

$training_data get_training_data_from_db($record_id); // Get the Training Data from MySQL
$training_data prepare_data_from_db($training_data); // Prepare the data
$num_data count($training_data["input"]); // How many sets are there?

// Hand the data over to FANN
$train_data fann_create_train_from_callback($num_data$num_input$num_output"create_train_callback");

// Test for $train_data 
if ($train_data) {
   
   
// Create $ann
   
$ann fann_create_standard($num_layers$num_input$num_neurons$num_output);

   
// Test for $ann
   
if ($ann) {
       
fann_set_activation_function_hidden($annFANN_SIGMOID_SYMMETRIC);
       
fann_set_activation_function_output($annFANN_SIGMOID_SYMMETRIC);

       
// Train XOR ANN with training data obtainied from MySQL
       
if (fann_train_on_data($ann$train_data$max_epochs$epochs_between_reports$desired_error)){
           print(
'XOR trained.<br>' PHP_EOL);

           
// Test $ann
           
$input = array(-11);
           
$calc_out fann_run($ann$input);
           
printf("xor test (%f,%f) -> %f\n"$input[0], $input[1], $calc_out[0]);
           
           
// destore $ann 
           
fann_destroy($ann);
        }
    }
}
?>
2016-10-21 20:34:45
http://php5.kiev.ua/manual/ru/function.fann-create-train-from-callback.html

    Поддержать сайт на родительском проекте КГБ