Как выбрать количество единиц для плотного слоя в свернутой нейронной сети для задачи классификации изображений? - PullRequest
0 голосов
/ 20 июня 2020
from keras import layers
from keras import models
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',
input_shape=(150, 150, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

При чтении кода для задачи двоичной классификации при классификации изображений как кошек или собак в слое Dense они использовали 512 единиц. Как они к этому пришли? Есть ли формула для получения количества единиц в плотном слое. Обычно, если есть много функций, мы выбираем большое количество единиц в плотном слое. Но как мы можем идентифицировать особенности? Я знаю, что выходной плотный слой имеет одну единицу в качестве проблемы двоичной классификации, поэтому на выходе будет либо 0 или 1 сигмоидной функцией.

1 Ответ

0 голосов
/ 20 июня 2020

Мой опыт работы с CNN заключается в том, чтобы сначала начать с простой модели и оценить ее эффективность. Если вы достигнете удовлетворительного уровня подготовки и проверки, остановитесь на этом. Если нет, попробуйте настроить гиперпараметры, такие как скорость обучения, чтобы добиться лучшей производительности, прежде чем добавлять дополнительную сложность в вашу модель. Я обнаружил, что использование регулируемой скорости обучения помогает повысить производительность модели. Для этой цели используйте обратный вызов Keras ReduceLROnPlateau. Установите его для контроля точности проверки и снижения скорости обучения, если она не улучшится после указанного количества эпох. Документация находится здесь . Также используйте обратный вызов Keras ModelCheckpoint, чтобы сохранить модель с наименьшими потерями при проверке. Документация находится здесь . Если эти методы не достигают желаемого уровня точности обучения, вы можете захотеть увеличить сложность модели, добавив больше узлов в плотный слой или добавив дополнительные плотные слои. Если ваша модель имеет высокую точность обучения, но низкую точность проверки, ваша модель может быть чрезмерно подогнанной. В этом случае добавьте выпадающий слой. Документация находится здесь . Проблема с добавлением большей сложности вашей модели - это тенденция к ее чрезмерной подгонке. Поэтому, если вы увеличиваете узлы в плотном слое или добавляете дополнительные плотные слои и имеете низкую точность проверки, вам придется добавить отсев. Кроме того, вы можете рассмотреть альтернативные подходы к управлению подгонкой, например регуляризаторы. Документация для этого находится здесь . Для вашего конкретного примера c Я думаю, что у вас больше узлов в плотном слое, чем необходимо. Для начала попробуйте что-то вроде 64 узлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...