Poiché la parola "livello" spesso indica cose diverse quando applicate a un livello convoluzionale (alcune trattano tutto attraverso il raggruppamento come un singolo livello, altre trattano convoluzione, non linearità e raggruppamento come "strati" separati; see fig 9.7) non è chiaro dove posso applicare l'abbandono in uno strato convoluzionale.Dove dovrei applicare il dropout a un livello convoluzionale?
L'interruzione si verifica tra non linearità e raggruppamento?
Ad esempio, in tensorflow sarebbe qualcosa di simile:
kernel_logits = tf.nn.conv2d(input_tensor, ...) + biases
activations = tf.nn.relu(kernel_logits)
kept_activations = tf.nn.dropout(activations, keep_prob)
output = pool_fn(kept_activations, ...)
[Un altro esempio] (http://danielnouri.org/notes/2014/12/17/using-convolutional- neural-nets-to-detect-facial-keypoints-tutorial/# dropout) suggerisce l'applicazione del dropout dopo il pooling. – orome
Ho fatto esperimenti con l'utilizzo del dropout invece del downsampling medio su un'area 2x2 per le immagini. La mia teoria era che invece di eseguire il downsampling di ciascuna area dell'immagine 2x2, se invece fosse stato utilizzato il dropout per realizzare in modo efficace molte immagini leggermente diverse, avrei effettivamente più campioni di allenamento ed essere in grado di allenarmi a lungo e ottenere risultati migliori. Dopo aver provato diverse configurazioni e lunghe sessioni di allenamento, l'abbandono come mezzo per trasformare il downsampling nella generazione di contenuti si è rivelato inefficace. Aggiornamento – Wontonimo
, l'utilizzo di 3x3 fa davvero una grande differenza. Usare il dropout su un downsampo 3x3 invece di fare solo una media per un downsample 3x3 fa una differenza significativa. Su MNIST, questo si traduce in un 92,5% corretto utilizzando il dropout su downsample 3x3 per convendere, quindi maxpool vs 84,2% corretto usando la media su downsample 3x3 per convendere poi maxpool. – Wontonimo