Редактировать: Как правильно заметил @Toke Faurby, реализация по умолчанию в tenorflow фактически использует поэлементное выпадение. То, что я описал ранее, относится к конкретному варианту отсева в CNN, называемому пространственным отсевом :
В CNN каждый нейрон создает одну карту объектов. Поскольку выпадение пространственного выпадения работает для каждого нейрона, отбрасывание нейрона означает, что соответствующая карта объектов отброшена - например, каждая позиция имеет одинаковое значение (обычно 0). Таким образом, каждая карта объектов либо полностью отброшена, либо не сброшена вовсе
Объединение в пул обычно выполняется отдельно для каждой карты объектов, поэтому не должно иметь никакого значения, если вы применяете отсев до или после объединения. По крайней мере, так обстоит дело с операциями объединения, такими как максимальное объединение или усреднение.
Редактировать: Однако, если вы на самом деле используете поэлементное выпадение (которое, по-видимому, установлено по умолчанию для тензорного потока), это на самом деле имеет значение, если вы применяете выпадение до или после объединения. Однако, это не обязательно неправильный способ сделать это. Рассмотрим среднюю операцию объединения: если вы применяете отсев перед пулированием, вы эффективно масштабируете результирующие активации нейронов 1.0 - dropout_probability
, но большинство нейронов будет отличным от нуля (в общем). Если вы применяете отсев после среднего пула, вы, как правило, получаете долю (1.0 - dropout_probability)
ненулевых «немасштабированных» активаций нейронов и долю dropout_probability
нулевых нейронов. И то, и другое кажется мне жизнеспособным, и ни одно не является неправильным.
Этот урок использует объединение перед выпадением и дает хорошие результаты.
Это не обязательно означает, что другой порядок не работает, конечно. Мой опыт ограничен, я использовал их только на плотных слоях без объединения.
источник
Пример VGG-подобного коннета от Keras (выпадение, использованное после объединения):
источник