Я пытаюсь обучить нейронную сеть библиотекой Encog.Encog: веса продолжают расти
Dataset (~ 7000 примеров) перед расщеплением (в обучение (60%), кросс-валидации (20%) и тестирование (20%)) линейно нормированы так, что она выглядит следующим образом:
Min=-1.000000; Max=1.000000; Average=-0.077008
Target (идеальный) набор данных (также линейно нормализуется) выглядит следующим образом:
Min=0.201540; Max=0.791528; Average=0.477080
Я initialie сети, как это:
mNetwork = new BasicNetwork();
mNetwork.addLayer(new BasicLayer(null, false, trainingDataSet.getInputSize()));
mNetwork.addLayer(new BasicLayer(new ActivationSigmoid(), true, numberOfNeurons));
mNetwork.addLayer(new BasicLayer(new ActivationSigmoid(), false, trainingDataSet.getIdealSize()));
mNetwork.getStructure().finalizeStructure();
mNetwork.reset();
Я использую ResilientPropagation
тренер (пытался Backpropagation
а):
ResilientPropagation training = new ResilientPropagation(mNetwork, mTrainingDataSet);
for (int i = 0; i < mNumberOfIterations; ++i) {
training.iteration();
result.trainingErrors[i] = mNetwork.calculateError(mTrainingDataSet);
result.validationErrors[i] = mNetwork.calculateError(mValidationDataSet);
System.out.println(String.format("Iteration #%d: error=%.8f", i, training.getError()));
}
training.finishTraining();
В процессе обучения ошибок об этом сообщил тренер, как правило, снижается. После окончания обучения я сбрасывал вес:
0.04274211002929323,-0.5481902707068103,0.28978635361541294,-0.203635994176051,22965.18656660482,22964.992410871928,22966.23882308963,22966.355722230965,22965.036733143017,22964.894030965166,22966.002332259202,22965.177650526788,22966.009842504238,22965.971560546248,22966.257180159628,22966.234150681423,-21348.311232865744,-21640.843082085466,-21057.13217475862,-21347.52051343582,-21347.988714647887,-21641.161098510198,-21057.27275747668,-21348.784123049118,-21347.719149090022,-21639.773689115867,-21057.095487328377,-21348.269878600076,22800.304816865206,23090.894751729396,22799.39388588725,22799.72408290791,22800.249806096508,22799.19823789763,22799.85510732227,22799.99965531053,22799.574773588192,22799.57945236908,22799.12542315293,22799.523065957797
Обычно они либо очень большие, либо очень маленькие. С сигмовидной она заканчивается Предсказания сходящихся к некоторому числу, для весов экземпляра (получили после 500 итераций) выше, дает мне:
Min=0.532179; Max=0.532179; Average=0.532179
Там, кажется, что-то не так с сетью или учебными конфигурациями. Если моя сеть страдает от низкой дисперсии, по крайней мере, она будет генерировать результаты, которые соответствуют целевому диапазону. Если бы он страдал от большой дисперсии, он бы соответствовал цели. И теперь, он просто пропускает цель целиком.
Почему ошибка уменьшается и становится довольно низкой, даже если предсказания удалены? Кто-нибудь видит очевидные ошибки в моем примере выше? Я еще не очень опытен в нейронных сетях.
Вес может увеличиться, я видел обученный нейронные сети с большими весами. Я не вижу ничего плохого в вашем коде выше. Вы нормализуетесь до хороших диапазонов. Что касается того, почему обучение не сходится, что часто сложно ответить. Обычные подозреваемые включают в себя: искаженные данные (слишком много аналогичных результатов), шумные данные, противоречивые результаты. – JeffHeaton
Как я уже говорил, у меня нет опыта с нейронными сетями. Я думал, что шум будет только уменьшать точность. Я считаю, что проблема может быть проблемой. Я попытаюсь уменьшить его. – Pijusn