2016-02-05 1 views
2

У меня есть набор данных для классификации, который состоит из обучения размером 8000x (32x32x3 изображений) и теста размера 2000x (изображения одинакового размера).
Я выполняю очень простую задачу - отличить транспортные средства и фон. Я использую cross_entropy как функцию стоимости.Избавление от насыщения softmax в сети DeepMNIST для классификации цветных изображений в TensorFlow

Сеть, которую я использую, почти такая же, как и в DeepMNIST, за исключением того, что первый фильтр имеет размер 3x ... вместо 1x ... потому что это цветное изображение, а выход имеет размер два, потому что есть только два класса: транспортные средства или нет. Увидев результаты этой относительно прямой задачи, я задал себе несколько допросов:

-Первый, если я не использую достаточно большой размер партии (> 200), я застрял почти каждый раз с точностью 62% (в локальном оптимуме) по двум наборам, которых недостаточно для моей потребности

-Всегда всякий раз, когда я использую правый оптимизатор Адам с правильным размером партии и скоростью обучения, я поднимаюсь до 92%, однако выходы всегда очень тревожно хорошо как [0.999999999 0.000000000001].

Это не должно происходить, поскольку задача сложна.
Поэтому, когда я иду полностью сверточно, чтобы создать тепловую карту, я получил 1.000001 почти везде из-за насыщения.
Что я делаю неправильно? Считаете ли вы, что отбеливание решит проблему? Нормализация партии? Что-то другое ? С чем я сталкиваюсь?

+0

Отбеливание данных и добавление нормализации партии только ухудшают результат! Насыщенность есть, и точность не достаточно хороша! Есть идеи ? – jean

ответ

3

Это знак переобучения. Если вы тренируетесь на небольшом наборе данных достаточно долго с достаточно большой моделью, в конечном итоге ваши доверительные отношения будут насыщены до 0 и 1. Следовательно, те же методы, которые предотвращают переобучение (штрафы за регуляризацию, отсева, раннюю остановку, увеличение данных), помогут там.

Моим первым шагом для крошечного набора данных, подобного этому, было бы увеличение набора данных с помощью искаженных шумом примеров. IE, для вашего примера я бы добавил 800k-шумы с испорченными примерами с оригинальными ярлыками и тренировал их.

+0

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

+0

Хм, это на самом деле подозрительно. Если вы не приближаетесь к 100% -ной точности, вы не должны сильно насыщаться. Это потому, что вы даете неверное предсказание с уверенностью на 100%, в то время как обучение направит ваши параметры в бесконечность в противоположном направлении. У Deep MNIST уже есть выпад после fc1, вы можете попытаться добавить еще один после после fc2 –

+0

Да, это одна из причин, по которой я думал, что это не переусердство! Казалось странным, чтобы получить насыщение с точностью до 60% или так! (Что я теперь получаю с отбеливанием и отбрасыванием перенормировки партии на fc1!) Каковы наиболее вероятные причины, которые могут привести к такому поведению? Взрывающие градиенты? Как вы думаете, может быть что-то не так с моей реализацией? Я добавлю его в fc2 спасибо! Я считаю, что разумно применять исключения только для полностью подключенной части сети, поскольку фильтры не могут перегружать данные, поскольку они всегда работают одинаково. – jean

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