2015-09-18 1 views
2

Я играю с Лазанью какое-то время для решения проблемы двоичной классификации с использованием сверточной нейронной сети. Однако, хотя я получаю хорошие результаты (иш) для обучения и проверки, моя проверка и точность теста всегда постоянны (сеть всегда предсказывает тот же класс).Сверточная точность нейронной сети с лазаньей (регрессия против классификации)

Я столкнулся с this, у кого была такая же проблема, как у меня с лазанью. Их решением было установить regression=True, поскольку они используют Nolearn поверх Лазанья.

Кто-нибудь знает, как установить эту же переменную в лазанье (как я не хочу использовать Nolearn)? В дополнение к этому, есть ли у кого-нибудь объяснение, почему это должно произойти?

+0

Есть ли особая причина, по которой вы не хотите использовать nolearn? –

+0

Никакой конкретной причины, кроме нее, похоже, добавляет еще один слой поверх лазаньи, который я не уверен. Как вы думаете, он добавляет больше функциональности? Также мне кажется, что отлаживать его сложнее? – mjacuse

+0

IMO nolearn добавляет приятные функциональные возможности, такие как BatchIterator, которые я использую много для предварительной обработки (случайные данные об урожае и т. Д.). Я больше не нашел отладки, так как начал использовать nolearn. Но это личная точка зрения. –

ответ

0

Глядя на the code of the NeuralNet class от nolearn, он выглядит как параметр regression используется в разных местах, но в большинстве случаев это влияет на то, как вычисляются выходные значения и потери.

В случае regression=False (по умолчанию) сеть выводит класс с максимальной вероятностью и вычисляет потерю с категориальной кроссентропией. С другой стороны, в случае regression=True сеть выводит вероятности каждого класса и вычисляет потери с квадратичной ошибкой на выходном векторе.

Я не являюсь экспертом в области глубокого обучения и CNN, но причина, по которой это могло сработать, заключается в том, что в случае regression=True и при наличии небольшого градиента ошибок применение небольших изменений к сетевым параметрам может не изменить прогнозируемый класс и связанные с этим потери, и могут привести к тому, что алгоритм «подумает» о том, что он сходится. Но если вместо этого вы посмотрите на вероятности классов, небольшие изменения параметров повлияют на вероятности и полученную среднюю квадратичную ошибку, и сеть продолжит движение по этому пути, что может в конечном итоге изменить предсказания.

Это просто предположение, это трудно сказать, не видя кода и набора данных.