2017-02-14 10 views
0

Реализация сверточной нейронной сети для классификации изображений, у меня есть хорошие результаты по моей точности тренировочного набора (98%), но точность тестирования установлена ​​на низком уровне (около 82%). Я столкнулся с проблемой переобучения. Я попытался решить эту проблему, выполнив функцию отсева (сохраняя 50% нейронов), но оказывается, что это решение снижает точность обучения до 80%! Означает ли это, что у меня должно быть больше нейронов в моем CNN? Что я могу сделать, чтобы предотвратить эту проблему?Внедрение исключения из моего CNN делает снижение точности обучения

Я использую библиотеку Tensorflow и вот кусок кода для тренировочного цикла: (Я не уверен, что я реализовал это правильно)

for epoch in range(22000): 
    permutation=np.random.permutation(19600) 
    permutation=permutation[0:200] 
    batch=[train_set[permutation],train_label[permutation]] 
    summary,model,cost=sess.run([merged,train_step,cross_entropy],feed_dict={X:batch[0],Yreal:batch[1],drop_value:0.5}) #training with 50% of the neurons 
    train_writer.add_summary(summary,epoch) 
    print(cost) 
    if epoch%500==0: 
     print(epoch) 
     summary=sess.run(merged,feed_dict={X:test_set[0:300],Yreal:test_label[0:300],drop_value:1}) #evaluating testing set accuracy using 100% of the neurons 
     test_writer.add_summary(summary,epoch) 
+0

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

+0

На самом деле вы правы, я не думал об этом таким образом. Но если я хочу добиться хорошей точности тестирования, я должен постоянно повышать точность обучения, верно? Есть ли способ сбалансировать хорошую точность обучения и хорошее обобщение? Моя первая идея - тренировать более мощную сеть ... не уверен, что она может работать. Я попробую и обратную связь здесь. –

ответ

1

Если точность испытаний также вокруг одной и той же марки, как подготовленности точность в случае отсева, то вы можете увеличить количество нейронов. Кроме того, 0,50 в качестве первоначального отсева довольно высока. Начните с 0,25 (т. Е. Сохраните вероятность 0,75 для уровня отсева). Кроме того, я бы рекомендовал использовать некоторое увеличение данных, такое как вращение, искажение яркости, обмен цветовыми каналами в зависимости от характера данных и использование некоторой регуляризации. Также постройте кривые обучения и проверьте, как точность теста изменяется с точностью обучения.

+0

Большое спасибо за ответ. Действительно, после внедрения отсева, обучение и тестирование имеют очень похожие кривые обучения. Как вы рекомендуете, я попробую с другими значениями падения. В каких слоях вы рекомендуете добавлять нейроны? –

+0

Это субъективно, я бы сказал, если нижний отсева не работает, двойные нейроны во всех слоях, за исключением, конечно, окончательного. – rajat