Edit: Como o @Toke Faurby apontou corretamente, a implementação padrão no tensorflow realmente usa um dropout em elementos. O que eu descrevi anteriormente se aplica a uma variante específica de abandono nas CNNs, chamada abandono espacial :
Em uma CNN, cada neurônio produz um mapa de características. Como o abandono espacial do abandono funciona por neurônio, o abandono de um neurônio significa que o mapa de características correspondente é abandonado - por exemplo, cada posição tem o mesmo valor (geralmente 0). Portanto, cada mapa de recursos é totalmente descartado ou não é descartado.
O pool geralmente opera separadamente em cada mapa de recursos, portanto, não deve fazer diferença se você aplicar o dropout antes ou depois do pool. Pelo menos esse é o caso de operações de agrupamento, como maxpool ou média.
Editar: No entanto, se você realmente usar o dropout por elementos (o que parece estar definido como padrão para o tensorflow), isso realmente fará diferença se você aplicar o dropout antes ou depois do pool. No entanto, não há necessariamente uma maneira errada de fazê-lo. Considere a operação média de agrupamento: se você aplicar o abandono antes do agrupamento, escalará efetivamente as ativações de neurônios resultantes 1.0 - dropout_probability
, mas a maioria dos neurônios será diferente de zero (em geral). Se você aplicar o abandono após o agrupamento médio, geralmente acabará com uma fração de (1.0 - dropout_probability)
ativações de neurônios "não escalonados" dropout_probability
diferentes de zero e uma fração de zero de neurônios. Ambas me parecem viáveis, nem totalmente erradas.
Este tutorial usa o pool antes do abandono e obtém bons resultados.
Isso não significa necessariamente que a outra ordem não funcione, é claro. Minha experiência é limitada, eu só as usei em camadas densas sem pool.
fonte
Exemplo de convnet tipo VGG da Keras (dropout usado após o pool):
fonte