Я только начинаю работать с нейронными сетями и использую Synaptic, чтобы начать работу (я знаю, что знаю, нейронные сети в JavaScript , ах!).
Это пример кода, приведенный в этом разделе для создания нейронной сети для изучения функции XOR:
var myPerceptron = new Architect.Perceptron(2, 3, 1);
var myTrainer = new Trainer(myPerceptron);
myTrainer.XOR();
console.log(myPerceptron.activate([0, 0])); // 0.0268581547421616
console.log(myPerceptron.activate([1, 0])); // 0.9829673642853368
console.log(myPerceptron.activate([0, 1])); // 0.9831714267395621
console.log(myPerceptron.activate([1, 1])); // 0.02128894618097928
Я экспериментирую с добавлением дополнительных слоев и смотрю, что получится. Добавление одного дополнительного скрытого слоя не имеет большого эффекта, но добавление двух слоев делает вывод идентичным независимо от ввода.
var myPerceptron = new Architect.Perceptron(2, 3, 3, 3, 1);
var myTrainer = new Trainer(myPerceptron);
myTrainer.XOR();
console.log(myPerceptron.activate([0, 0])); // 0.521076904986927
console.log(myPerceptron.activate([1, 0])); // 0.5210769149857782
console.log(myPerceptron.activate([0, 1])); // 0.5210769118775331
console.log(myPerceptron.activate([1, 1])); // 0.5210769209325651
Почему так происходит? Это просто потому, что более сложная сеть требует гораздо большего обучения, или потому, что такая сеть по своей сути не подходит для такого рода проблем?