<?php
// 此示例将使用 XOR 数据集,其中负一用零表示,
// 一用一百表示,并演示如何
// 缩放这些值,以便 FANN 可以理解它们,然后如何
// 缩放 FANN 返回的值,以便您可以理解它们。
// 缩放允许您将数据集中的原始数据数字(如 -1234.975 或 4502012)
// 转换为神经网络可以理解的输入/输出范围。
// 缩放允许您将缩放后的数据转换回
// 原始范围。
// scale_test.data
// 请注意,这些值是“原始”或未缩放的。
/*
4 2 1
0 0
0
0 100
100
100 0
100
100 100
0
*/
////////////////////
// 配置 ANN //
////////////////////
// 新 ANN
$ann = fann_create_standard_array(3, [2,3,1]);
// 设置激活函数
fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);
// 从文件读取原始(未缩放)训练数据
$train_data = fann_read_train_from_file("scale_test.data");
// 将数据范围缩放到 -1 到 1
fann_set_input_scaling_params($ann , $train_data, -1, 1);
fann_set_output_scaling_params($ann , $train_data, -1, 1);
///////////
// 训练 //
///////////
// 推测您将在此处进行训练(取消注释以执行训练)...
// fann_train_on_data($ann, $train_data, 100, 10, 0.01);
// 但是,无需测试缩放,因为训练文件
// 在这种情况下,仅用于计算/推导出缩放范围。
// 但是,进行训练会提高 ANN 给出的答案
// 与训练数据的相关性。
//////////
// 测试 //
//////////
$raw_input = array(0, 100); // 测试 XOR (0,100) 输入
$scaled_input = fann_scale_input ($ann , $raw_input); // 缩放的 XOR (-1,1) 输入
$descaled_input = fann_descale_input ($ann , $scaled_input); // 缩放的 XOR (0,100) 输入
$raw_output = fann_run($ann, $scaled_input); // 从 ANN 获取答案/输出
$output_descale = fann_descale_output($ann, $raw_output); // 缩放输出
////////////////////
// 报告结果 //
////////////////////
echo 'The raw_input:' . PHP_EOL;
var_dump($raw_input);
echo 'The raw_input Scaled then De-Scaled (values are unchanged/correct):' . PHP_EOL;
var_dump($descaled_input);
echo 'The Scaled input:' . PHP_EOL;
var_dump($scaled_input);
echo "The raw_output of the ANN (Scaled input):" . PHP_EOL;
var_dump($raw_output);
echo 'The De-Scaled output:' . PHP_EOL;
var_dump($output_descale);
////////////////////
// 示例输出 //
////////////////////
/*
The raw_input:
array(2) {
[0]=>
float(0)
[1]=>
float(100)
}
The raw_input Scaled then De-Scaled (values are unchanged/correct):
array(2) {
[0]=>
float(0)
[1]=>
float(100)
}
The Scaled input:
array(2) {
[0]=>
float(-1)
[1]=>
float(1)
}
The raw_output of the ANN (Scaled input):
array(1) {
[0]=>
float(1)
}
The De-Scaled output:
array(1) {
[0]=>
float(100)
}
*/