Ошибка обработки данных массива разной ширины нейронной сетью - PullRequest
0 голосов
/ 10 мая 2019

У меня ошибка при передаче массива «Input» в нейронную сеть для обучения.Мне нужно научить нейронную сеть массиву, в котором разное количество столбцов в некоторых строках.Я назначаю количество нейронов максимальному значению строки массива.Я использую библиотеку Encog.Можно ли сделать это?Пожалуйста, помогите, потому что я новичок в этом.

Я пытался уменьшить количество нейронов в нейронной сети, но некоторые данные из массива не использовались.Я попытался найти некоторую информацию об этом, но безуспешно.

//array with data for training
public static double[][] INPUT = {
{1.0, 8.0, 13.0, 0,0, 12.0, 6.0, 17.0, 24.0, 440.0, 6.0, 0.0, 19.0,96.0}, 
{1.0, 0,0, 0.0, 4.0, 52.0, 6.0, 0.0, 5.0, 6.0, 7.0, 150.0, 5.0, 1.0},
{0.0, 0.0, 0.0, 0.0, 0.0, 413.0, 0.0, 117.0, 0.0, 0.0, 0.0}, 
{1.0, 1.0, 1.0, 7.0, 0.0, 3.0, 7.0, 167.0, 1.0, 7.0, 0.0, 1.0, 44.0}, 
{0.0, 1.0, 5.0, 5.0, 5.0, 6.0, 0.0, 4.0, 186.0, 13.0, 0.0, 1.0}
};

//ideal data for neural network
public static double[][] IDEAL = {{0.9, 0.1}, {0.3, 0.7}, {0.2, 0.8}, 
{1.0, 0.0}, {0.4, 0.6}};

Здесь структура нейронной сети

BasicNetwork network = new BasicNetwork();
network.addLayer(new BasicLayer(null, true, 13));
network.addLayer(new BasicLayer(new ActivationSigmoid(), true, 9));
network.addLayer(new BasicLayer(new ActivationSigmoid(), true, 2));
network.getStructure().finalizeStructure();
network.reset();

MLDataSet trainSet = new BasicMLDataSet(INPUT, IDEAL);
MLTrain train = new ResilientPropagation(network, trainSet);

    int epoch = 1;

    do {
        train.iteration();
        System.out.println("Epoch #" + epoch + " Error:" + 
train.getError());
        epoch++;
    } while (train.getError() > 0.01);
    train.finishTraining();

1 Ответ

0 голосов
/ 12 мая 2019

Выше у вас счетчик входных нейронов установлен на 13, поэтому Encog потребует, чтобы вы всегда отправляли 13 входов.

Трудно ответить, не зная, что представляют собой данные.Что представляют собой столбцы?Почему у вас иногда разные суммы?Они пропускают значения?Если они пропускают значения, то у вас всегда должен быть входной вектор 13, и вы должны найти способ приблизить пропущенные значения, которые имеют смысл.

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

Если массивыразной длины, поскольку они представляют собой какие-то данные временных рядов различной длины, вам необходимо использовать другой тип кодирования или модель временного ряда (кроме нейронной сети с прямой связью).

...