Я обучаю простому нейронному сетевому распространению Back Propagation, но я получаю только 0.0 или 1.0, используя Neuroph Framework - PullRequest
0 голосов
/ 13 июня 2019

У меня есть нейронная сеть, созданная с использованием Java-инфраструктуры neuroph.Сеть имеет 2 входных нейрона, 1 выход и 2 скрытых слоя с 8 нейронами.И я пытаюсь создать простую сеть для тестирования.

        ds.addRow(new DataSetRow(new double[] {0.1, 0.1}, new double[] {0.1}));
    ds.addRow(new DataSetRow(new double[] {0.2, 0.2}, new double[] {0.2}));
    ds.addRow(new DataSetRow(new double[] {0.3, 0.3}, new double[] {0.3}));
    ds.addRow(new DataSetRow(new double[] {0.4, 0.4}, new double[] {0.4}));
    ds.addRow(new DataSetRow(new double[] {0.5, 0.5}, new double[] {0.5}));
    ds.addRow(new DataSetRow(new double[] {0.6, 0.6}, new double[] {0.6}));
    ds.addRow(new DataSetRow(new double[] {0.7, 0.7}, new double[] {0.7}));
    ds.addRow(new DataSetRow(new double[] {0.8, 0.8}, new double[] {0.8}));
    ds.addRow(new DataSetRow(new double[] {0.9, 0.9}, new double[] {0.9}));
    ds.addRow(new DataSetRow(new double[] {1.0, 1.0}, new double[] {1.0}));
    BackPropagation backPropagation = new BackPropagation();
    backPropagation.setMaxIterations(100000);
    backPropagation.setMaxError(0.0075);
    backPropagation.setMomentum(0.10);
    backPropagation.setLearningRate(0.30);

Как видно из кода, это довольно простая сеть, в которой первый набор значений типа double представляет собой вход, а последний -является правильным выходом, так что входы 0.3, 0.3 должны давать 0.3 и т. д. Однако, когда я запускаю его и после обучения, когда я ввожу разные входы, я получаю 0.0 или 1.0 (в основном 1.0, когда это 0.0, 0.0Я вернул 0)Это почему?Почему между ними ничего нет.

1 Ответ

0 голосов
/ 14 июня 2019

Проблема заключалась в том, что нейронная сеть, которую я использовал здесь, является простой сетью Perceptron, которая является отличной сетью для контролируемого обучения и линейного классификатора, означающего, что она будет выводить только 1 или 0. Для этого случая использования лучше всего использовать многоуровневый персептрон, поскольку он может выдавать выходные данные в диапазоне от 0 до 1.

Вот пример кода с использованием Neuroph Java Framework.

MultiLayerPerceptron ann = new MultiLayerPerceptron(TransferFunctionType.LINEAR, 1, 3, 1); 
ann.learn(ds);

где 1 - количество нейронов входного слоя, 3 нейрона для скрытого слоя и последний 1 - количество нейронов в выходном слое. А затем просто добавьте набор данных в сеть для изучения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...