MaxPooling уменьшает переоснащение? - PullRequest
4 голосов
/ 13 января 2020

Я обучил следующую модель CNN с меньшим набором данных, поэтому она выполняет переобучение:

model = Sequential()
model.add(Conv2D(32, kernel_size=(3,3), input_shape=(28,28,1), padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))

model.add(Conv2D(32, kernel_size=(3,3), padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.4))

model.add(Flatten())
model.add(Dense(512))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
model.compile(loss="categorical_crossentropy", optimizer=Adam(), metrics=['accuracy'])

Модель имеет много обучаемых параметров (более 3 миллионов, поэтому мне интересно, если я следует уменьшить количество параметров с помощью дополнительного MaxPooling, например, следующим образом?

Conv - BN - Act - MaxPooling - Conv - BN - Act - MaxPooling - Dropout - Flatten

или с дополнительными MaxPooling и Dropout как следует?

Conv - BN - Act - MaxPooling - Dropout - Conv - BN - Act - MaxPooling - Dropout - Flatten

Я пытаюсь полностью понять смысл MaxPooling и может ли он помочь против переоснащения.

Ответы [ 2 ]

4 голосов
/ 13 января 2020

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

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

0 голосов
/ 11 февраля 2020

Вы должны НЕ Использовать Max-pooling, чтобы уменьшить переоснащение, хотя это незначительно сказывается, НО этого небольшого эффекта недостаточно, потому что вы применяете Max- Объединение в пул после сверточных операций, что означает, что объекты уже обучены в этом слое, и поскольку максимальное объединение используется для уменьшения высоты и ширины вывода , это сделает объекты в следующем слое имеющими Меньше сверточных операций для изучения, что означает МАЛЕНЬКИЙ ЭФФЕКТ на проблеме переоснащения, которая не решит ее. На самом деле не рекомендуется использовать пулинг для такого рода проблем, и вот несколько советов:

  1. Сократите количество ваших параметров, потому что очень трудно (не невозможно) найти достаточно данных для обучения 3 миллионы параметров без наложения.
  2. Используйте методы регуляризации, такие как выпадение, которое очень эффективно, или L2-регуляризация, .. et c.
  3. 3.Не используйте максимальное объединение с целью уменьшения переоснащения, потому что оно используется для уменьшения количества представлений и для того, чтобы сделать сеть немного более устойчивой к некоторым функциям, дальнейшее более широкое ее использование сделает сеть более устойчивой к каким-либо особенностям.

Надеюсь, это поможет!

...