Есть такая библиотека FANN - искусственная нейронная сеть.
Ее можно установить и подключить к PHP, например, в качестве расширения.
Далее я пишу следующий код:
$ann = fann_create_standard_array(3, array(2, 3, 1)); //создали нейронную сеть с 2 входящими нейронами, 1 слоем из 3 нейронов, и 1 выходящим нейроном, итого у нас 8 нейронов будет всего
var_dump(fann_get_num_input($ann)); // количество входящих нейронов (2)
var_dump(fann_get_num_output($ann)); // количество исходящих нейронов (1)
var_dump(fann_randomize_weights($ann,1,100)); // рандомизировали веса нейронов от 1 до 100, например, слуачйно
var_dump(fann_get_total_neurons($ann)); //всего нейронов в сети, должно быть 8
var_dump(fann_train($ann,array(25,13),array(7))); //обучили нейронную сеть что входящие 25 и 13 = 7, и на выходе получаем 1 почему-то в функции fann_run:
var_dump(fann_run($ann,array(25,13))); //запустили нейронную сеть, получили 1, а ждем 7.. :(
var_dump(fann_get_connection_array($ann)); //получили такой странный результат связей и результат 1, а не 7
А вот и результат выполнения:
int(2)
int(1)
bool(true)
int(8)
bool(true)
array(1) {
[0]=>
float(1)
}
array(13) {
[0]=>
object(FANNConnection)#1 (3) {
["from_neuron"]=>
int(0)
["to_neuron"]=>
int(3)
["weight"]=>
float(45.033920288086)
}
[1]=>
object(FANNConnection)#2 (3) {
["from_neuron"]=>
int(1)
["to_neuron"]=>
int(3)
["weight"]=>
float(59.61791229248)
}
[2]=>
object(FANNConnection)#3 (3) {
["from_neuron"]=>
int(2)
["to_neuron"]=>
int(3)
["weight"]=>
float(65.410202026367)
}
[3]=>
object(FANNConnection)#4 (3) {
["from_neuron"]=>
int(0)
["to_neuron"]=>
int(4)
["weight"]=>
float(100.04418182373)
}
[4]=>
object(FANNConnection)#5 (3) {
["from_neuron"]=>
int(1)
["to_neuron"]=>
int(4)
["weight"]=>
float(59.478809356689)
}
[5]=>
object(FANNConnection)#6 (3) {
["from_neuron"]=>
int(2)
["to_neuron"]=>
int(4)
["weight"]=>
float(88.301513671875)
}
[6]=>
object(FANNConnection)#7 (3) {
["from_neuron"]=>
int(0)
["to_neuron"]=>
int(5)
["weight"]=>
float(33.477821350098)
}
[7]=>
object(FANNConnection)#8 (3) {
["from_neuron"]=>
int(1)
["to_neuron"]=>
int(5)
["weight"]=>
float(62.174163818359)
}
[8]=>
object(FANNConnection)#9 (3) {
["from_neuron"]=>
int(2)
["to_neuron"]=>
int(5)
["weight"]=>
float(47.344665527344)
}
[9]=>
object(FANNConnection)#10 (3) {
["from_neuron"]=>
int(3)
["to_neuron"]=>
int(7)
["weight"]=>
float(54.048503875732)
}
[10]=>
object(FANNConnection)#11 (3) {
["from_neuron"]=>
int(4)
["to_neuron"]=>
int(7)
["weight"]=>
float(60.595252990723)
}
[11]=>
object(FANNConnection)#12 (3) {
["from_neuron"]=>
int(5)
["to_neuron"]=>
int(7)
["weight"]=>
float(90.935493469238)
}
[12]=>
object(FANNConnection)#13 (3) {
["from_neuron"]=>
int(6)
["to_neuron"]=>
int(7)
["weight"]=>
float(21.079444885254)
}
}
Вопрос - почему на выходном нейроне я не получаю результат 7, а получаю результат 1, хотя запускаю сеть с теми же входящими параметрами 25 и 13, как и было проведено обучение сети ранее, которое значит, что входные параметры 25 и 13 равны должны быть именно 7?
P.S. игра с весами и их рандомизацией результатов не дала, добавление еще слоя - тоже, увеличение нейронов в 2 слое тоже, не меняет картину.