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($ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output($ann, FANN_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(-1, 1);
$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);
}
}
}
?>fann_create_train_from_callback
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
fann_create_train_from_callback
Референца за `function.fann-create-train-from-callback.php` со подобрена типографија и навигација.
fann_create_train_from_callback
("PECL fann >= 1.0.0")
fann_create_train_from_callback — Креира структура на податоци за обука од корисничка функција
= NULL
int
$num_data,int
$num_input,int
$num_output,callable
$user_function): resource
Креира структура на податоци за обука од корисничка функција. Бидејќи податоците за обука се нумерички (податок 1, податок 2...), корисникот мора да напише функција што прима број на сетот за обука (влез, излез) и го враќа сетот.
Параметри
num_data-
Бројот на податоци за обука
num_input-
Бројот на влезови по податок за обука
num_output-
Бројот на излези по податок за обука
user_function-
Корисничката функција со следниве параметри:
num- Број на сетот за обукаnum_input- Број на влезови по податок за обукаnum_output- Број на излези по податок за обука
Функцијата треба да врати асоцијативен низ со клучеви
inputandoutputи две вредности на низови за влез и излез.
Примери
Пример #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_input, 1),
"output" => array_fill(0, $num_output, 1),
);
}
$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
}
?>Белешки
Забелешка:
Оваа функција е достапна само ако екстензијата fann е изградена со libfann >= 2.2.
Види Исто така
- fann_read_train_from_file() - Чита датотека што ги чува податоците за обука
- fann_train_on_data() Низа од посакувани излези. Оваа низа мора да биде точно
- fann_destroy_train() - Ги уништува податоците за обука
- fann_save_train() - Зачувува структура на обука во датотека