Проверьте мой ответ на этот вопрос: В чем разница между поездом, проверкой и набором тестов в нейронных сетях?
Вам следует использовать 3 набора данных:
- Обучение
- Проверка
- Проверка
Набор данных проверки сообщает вам, когда вам следует остановиться (как я сказал в другом ответе):
Набор данных проверки используется для минимизации переобучения.Вы не регулируете вес сети с помощью этого набора данных, вы просто проверяете, что любое повышение точности по сравнению с набором обучающих данных на самом деле приводит к увеличению точности по сравнению с набором данных, который ранее не отображался в сети,или, по крайней мере, сеть не обучалась этому (то есть, набор данных проверки). Если точность набора обучающих данных увеличивается, но точность набора проверочных данных остается неизменной или уменьшается, значит, вы перегружаете свою нейронную сеть и вам следует прекратить обучение.
Хорошим методом проверки является использование 10-кратной (k-кратной) перекрестной проверки .Кроме того, существуют конкретные «стратегии» для разделения вашего набора данных на обучение, проверку и тестирование.Это что-то вроде науки само по себе, поэтому вы должны прочитать об этом тоже.
Обновление
Что касается вашего комментария к ошибке, я бы указал на некоторые ресурсы, которые могут дать вам лучшепонимание нейронных сетей (это довольно сложно, но для получения дополнительной информации см. ниже):
- http://www.colinfahey.com/neural_network_with_back_propagation_learning/neural_network_with_back_propagation_learning_en.html
- http://www.willamette.edu/~gorr/classes/cs449/linear2.html
Раздел 5.9 статьи Колина Фахи описывает ее лучше всего:
Формула обратного распространения ошибок:
Значения ошибок на выходах нейронной сети рассчитываются по следующей формуле:
Error = (Output - Desired); // Derived from: Output = Desired + Error;
Накопление ошибок в теле нейрона регулируется в соответствии с выходом тела нейрона и выходной ошибкой (определяется ссылками, соединенными с телом нейрона).Каждое выходное значение ошибки вносит свой вклад в накопитель ошибок следующим образом:
ErrorAccumulator += Output * (1 - Output) * OutputError;