Вывод Encog имеет значения меньше 0 - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь обучить сеть классифицировать тексты. На входе я отправляю вектор только из 0 и 1. Все хорошо работает :) Заметил, что Compute возвращает вектор отрицательных значений, таких как {0.56, -0.09, -0.01}. Может быть только одно отрицательное значение или несколько или ни одного.

Что я делаю не так?

inputSize = 360

outputSize = 3

        var network = new BasicNetwork();

        network.AddLayer(new BasicLayer(null, true, inputSize));

        network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, inputSize / 6));
        network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, inputSize / 6 / 4));

        network.AddLayer(new BasicLayer(null, false, outputSize));

        network.Structure.FinalizeStructure();
        network.Reset();

Encog версия 3.4.0

1 Ответ

0 голосов
/ 12 марта 2019

С созданием вашей сети все в порядке, хотя рекомендуется, чтобы количество нейронов в скрытом слое было как минимум наполовину, и вы, скорее всего, увидите более высокую точность при этом (Bayramet et al., 2013).

Отрицательные значения часто могут быть причиной неточной сети, вы можете увидеть среднеквадратическую ошибку (MSe) при обучении сети, хороший способ убедиться, что вы получаете наименьшую ошибку:

//Train network on data set, parameters (Network, dataset, learning rate, momentum).
IMLTrain learner = new Backpropagation(EncogNetwork, data, lr, mom);
double lastError = double.PositiveInfinity;

//Training loop while error is decreasing by 0.0000001 or more every 1000 iterations.
do
{
     //Set last error as error if the network has trained before.
     if (learner.Error != 0)
     {
         lastError = learner.Error;
     }

     //Do 1000 learning iterations.
     int i = 0;
     while (i < 1000)
     {
          learner.Iteration();
          i++;
     }

} while (lastError - learner.Error > 0.0000001);

double error = learner.Error;

Вероятно, ошибка в тех, то есть 1.2 приведет к плохим результатам.Вам также следует поэкспериментировать со скоростью обучения и импульсом, чтобы помочь достичь низкой ошибки.

При вычислениях легко получить отрицательные результаты, если вы вводите плохие или несвязанные значения.Это все, что я могу сказать по количеству предоставленной вами информации.

...