1

В Сверторной нейронной сети Я работаю над обучением CNN, и в процессе обучения, особенно в начале моего обучения, я получаю чрезвычайно высокую ошибку обучения , После этого эта ошибка начинает медленно снижаться. Примерно через 500 Эпохов ошибка обучения приближается к нулю (например, 0,006604). Затем я взял окончательную полученную модель для измерения ее точности по сравнению с данными тестирования, у меня около 89,50%. Это нормально? Я имею в виду получение высокой частоты ошибок при обучении в самом начале моего учебного процесса. Еще одна вещь, которую я хотел бы упомянуть, это то, что я заметил, что каждый раз, когда я уменьшаю количество скрытых узлов, результаты становятся лучше в конце моего обучения.Высокая обучающая ошибка в начале тренировки Сверточная нейронная сеть

Моя структура CNN является:

config.forward_pass_scheme = {'conv_v', 'pool', 'conv_v', 'pool', 'conv_v', 'pool', 'conv_v','full', 'full', 'full', 'out'}; 

Вот некоторые из моих гипер параметров:

config.learning_rate = 0.01; 
    config.weight_range = 2; 
    config.decay = 0.0005; 
    config.normalize_init_weights = 1; 
    config.dropout_full_layer = 1; 
    config.optimization = 'adagrad'; 

Ваша помощь и предложения в этой связи высоко оценили, спасибо заранее.

ответ

1

Если у вас есть большое количество скрытых устройств в полностью подключенных (fc) слоях и не имеют достаточных данных о тренировке, сеть будет переоборудовать на тренировочный набор. Сверточные слои менее подвержены переобучению, поскольку у них меньше параметров. Уменьшение количества скрытых единиц в слоях fc может привести к переобучению. Чтобы настроить эти гиперпараметры (например, количество скрытых узлов в fc-слое), используется набор валидации, чтобы модель давала хорошую производительность на тестовом наборе. Несмотря на то, что отсечение помогает сократить пересылку в слоях fc, может быть недостаточно, если вы добавите слишком много скрытых единиц.

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

+0

Уважаемый Bharat, Спасибо за ваш ответ, Фактически, я делаю то, что после каждой Epoch (полный проход через данные обучения) я оцениваю ошибку обучения, используя партию из набора тренировок. Это то, что вы подразумеваете под набором валидации ?. Еще одна вещь, которую я уже использую, выпадает с помощью метода оптимизации Adagrad. С вашего ответа я понимаю, что это нормально, чтобы получить высокую ошибку обучения в начале. –

+0

Набор валидации отделен от учебного набора. Хотя просмотр ошибки при обучении дает некоторую идею погоды, оптимизация сходится или нет, она не говорит, подходит ли модель для подгонки. Поэтому для измерения производительности модели используется набор валидации (или небольшая часть учебного набора, который не используется для обучения). Да, сразу после первой эпохи ошибка обучения может быть высокой. – Bharat

+0

Нет, в моем случае это отличается. Он начинает высоко, а затем идет очень медленно. Тем не менее, я получаю хорошие результаты на тестовом наборе. Просто, бросая высокую ошибку обучения в начале, меня беспокоит. –

0

Чем больше скрытых слоев/нейронов, тем больше весов в вашем NN. Это означает больше параметров для моделирования вашей проблемы. Поэтому имеет смысл, что добавление нейронов/слоев дает лучшее обучение.

С другой стороны, большее количество грузов для тренировки означает больше рисков переоборудования. Убедитесь, что в вашем учебном наборе у вас есть как минимум 5 раз больше образцов, которые у вас есть веса в вашем NN.

Другим решением для предотвращения переобучения является использование отсева.

Btw, в какую библиотеку вы используете?

+0

Уважаемый FiReTiTi, спасибо за вашу помощь, В первых двух строках, которые вы говорите с большим количеством слоев/нейронов, будет получен лучший результат, но то, что происходит в моем CNN, поскольку я уменьшаю количество скрытых нейронов получаются лучшие результаты. Я использую этот код [здесь] (https://github.com/jimmy-ren/vcnn_double-bladed) –

+0

Инициализация весов является случайной, поэтому дважды запускать одну и ту же архитектуру на одних и тех же данных могут давать разные результаты. И я был бы более конкретным, когда я сказал результат в свой ответ, я имел в виду обучение. Чем больше веса, тем лучше обучение, но, возможно, хуже прогноза на тестовом наборе. – FiReTiTi

+0

Вот что я думал об этом. Производит ли весы случайным образом в каждый момент времени правильно? и что является наилучшим способом обеспечения наилучшего результата или менее того же результата для каждой реализации. –

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