Реализация сверточной нейронной сети для классификации изображений, у меня есть хорошие результаты по моей точности тренировочного набора (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)
Не выбывает вид * предположительно *, чтобы уменьшить точность тренировки? В конце концов, отсева означает, что вы тренируетесь, используя меньшую, менее мощную сеть. Почему вы говорите, что есть проблема? –
На самом деле вы правы, я не думал об этом таким образом. Но если я хочу добиться хорошей точности тестирования, я должен постоянно повышать точность обучения, верно? Есть ли способ сбалансировать хорошую точность обучения и хорошее обобщение? Моя первая идея - тренировать более мощную сеть ... не уверен, что она может работать. Я попробую и обратную связь здесь. –