2014-09-13 2 views
0

Я пытаюсь обучить нейронную сеть библиотекой 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 

Там, кажется, что-то не так с сетью или учебными конфигурациями. Если моя сеть страдает от низкой дисперсии, по крайней мере, она будет генерировать результаты, которые соответствуют целевому диапазону. Если бы он страдал от большой дисперсии, он бы соответствовал цели. И теперь, он просто пропускает цель целиком.

Почему ошибка уменьшается и становится довольно низкой, даже если предсказания удалены? Кто-нибудь видит очевидные ошибки в моем примере выше? Я еще не очень опытен в нейронных сетях.

+0

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

+0

Как я уже говорил, у меня нет опыта с нейронными сетями. Я думал, что шум будет только уменьшать точность. Я считаю, что проблема может быть проблемой. Я попытаюсь уменьшить его. – Pijusn

ответ

0

Проблема в том, что вы нормализуетесь между -1 и 1 и используете сигмоид активации, который работает с числами от 0 до 1. Я бы предложил вам нормализовать между 0,1 и 0,9 или использовать tanh активировать функцию повтора.

Я также хотел бы использовать перекрестную проверку K раза увидеть здесь http://www.heatonresearch.com/node/2000

Винченцо

Смежные вопросы