Qual è l'architettura di un autoencoder convoluzionale in pila?


23

Quindi sto cercando di fare la predicazione su immagini di umani usando reti convoluzionali. Ho letto i giornali ( Paper1 e paper2 ) e questo legame StackOverflow , ma non sono sicuro io sono comprendere la struttura delle reti (non è ben definita sui giornali).

Domande:

  • Posso avere il mio input seguito da uno strato di rumore seguito da uno strato conv, seguito da uno strato di pool - lì dopo - devo de-pool prima di dare il mio output (che è la stessa immagine di input)?

    Supponiamo di avere diverse (135.240) immagini. Se uso 32, (12,21) kernel, seguito da un pool (2,2), finirò con 32 (62, 110) mappe delle caratteristiche. Ora deseleziono per ottenere 32 (124, 220) mappe caratteristiche e poi appiattirle? prima di dare il mio (135.240) livello di output?

  • Se ho più di questi livelli conv-pool, li dovrei allenare uno per uno, come in autoencoders denigrati in pila? Oppure - posso avere qualcosa come input-conv-pool-conv-pool-conv-pool-output (l'output è uguale all'input)? In tal caso, come dovrebbe essere gestito il pooling, i defers? Devo rimuovere il pool solo nell'ultimo livello del pool prima dell'output? E ancora: quale dovrebbe essere il fattore di ridimensionamento di quel de-pooling? L'intenzione è di riportare le mappe delle caratteristiche alla forma dell'input?

  • Dovrei introdurre livelli di rumore dopo ogni livello conv-pool-depool?

  • E poi, durante la regolazione fine, dovrei semplicemente rimuovere i livelli di declassamento e lasciare il resto uguale. O dovrei rimuovere sia i livelli di rumore che i livelli di de-pooling

  • Qualcuno può indicarmi un url / paper che ha dettagliato l'architettura di un codificatore automatico convoluzionale così impilato per fare pre-training sulle immagini?

Risposte:


12

Attualmente sto esplorando autoencoders convoluzionali in pila.

Cercherò di rispondere ad alcune delle tue domande al meglio delle mie conoscenze. Intendiamoci, potrei sbagliarmi, quindi prendilo con un granello di sale.

  1. Sì, è necessario "invertire" il pool e quindi contorcersi con un set di filtri per ripristinare l'immagine di output. Una rete neurale standard (considerando i dati MNIST come input, ovvero dimensioni di input 28x28) sarebbe:

        28x28(input) -- convolve with 5 filters, each filter 5x5 -->  5 @ 28 x 28 maps -- maxPooling --> 5 @ 14 x 14 (Hidden layer) -- reverse-maxPool --> 5 @ 28 x 28 -- convolve with 5 filters, each filter 5x5 --> 28x28 (output)
    
  2. La mia comprensione è che convenzionalmente è quello che si dovrebbe fare, cioè allenare ogni strato separatamente. Successivamente impilare i livelli e allenare nuovamente l'intera rete utilizzando i pesi pre-allenati. Tuttavia, Yohsua Bengio ha alcune ricerche (il riferimento sfugge alla mia memoria) che dimostrano che si potrebbe costruire una rete completamente impilata e allenarsi da zero.

  3. La mia comprensione è che il "livello di rumore" è lì per introdurre robustezza / variabilità nell'input in modo che l'allenamento non si adatti eccessivamente.

  4. Fintanto che stai ancora "allenando" il pre-allenamento o la messa a punto, penso che la parte di ricostruzione (cioè reverse-pooling, de-convoluzione ecc.) Sia necessaria. Altrimenti come si dovrebbe eseguire la propagazione del back-error per ottimizzare i pesi?

  5. Ho provato a sfogliare numerosi documenti, ma l'architettura non è mai stata spiegata per intero. Se ne trovi qualcuno, fammelo sapere.


Se hai terminato il pre-allenamento, non hai più bisogno della parte del decodificatore e la regolazione fine regolerà comunque l'encoder, questa volta per una migliore classificazione.
jwalker,

2
Come è possibile "reverse-maxPool"? Non puoi mai ricostruire un insieme di numeri dato solo il massimo ...?
Fequish,

1
@Fequish, è un reverse-maxpool approssimativo, ad es .: se pool = 2x2, mantengo la posizione del max e inserisco il max in quella particolare posizione in 2x2, restando 0
user2979010

1
@jwalker, il mio obiettivo finale non era la classificazione, quindi la messa a punto con una rete non srotolata
user2979010

@Fequish, allo scopo di decodificare il contrario è solo il prossimo più vicino di alto livello.
jwalker,

2

Ho anche cercato un modello completamente spiegato di Autoencoder convoluzionali in pila.

Mi sono imbattuto in tre diverse architetture. Li sto ancora studiando e ho pensato che potrebbero aiutare altri che stanno anche iniziando a esplorare i CAE. Qualsiasi ulteriore riferimento a documenti o implementazioni sarebbe di grande aiuto.

  1. Quello che hai citato usando il pooling - unpooling.
  2. Gli strati di (convolve) __ x_times -> (deconvolve) __ x_times,

    e ottieni le stesse dimensioni dell'input.

  3. (convolve -> pool) __ x_times -> (deconvoluzione forzata) __ y_times
    • l'imbottitura e i passi sono selezionati in modo tale che la dimensione finale dell'immagine sia la stessa dell'immagine originale.
    • Riferimento

2
Benvenuti nel sito. Era inteso come una risposta alla domanda del PO, un commento che chiedeva chiarimenti al PO o a uno dei rispondenti o una nuova domanda personale? Utilizza solo il campo "La tua risposta" per fornire le risposte alla domanda originale. Sarai in grado di commentare ovunque quando la tua reputazione è> 50. Se hai una nuova domanda, fai clic sul grigio ASK QUESTION nella parte superiore della pagina e ponila lì, quindi possiamo aiutarti correttamente. Dato che sei nuovo qui, potresti voler partecipare al nostro tour , che contiene informazioni per i nuovi utenti.
gung - Ripristina Monica

1
Era inteso come una risposta alla domanda del PO, anche se potrebbe non essere qualificato per essere una risposta completa. Stavo rispondendo all'ultima parte 'Ho provato a sfogliare numerosi articoli, ma l'architettura non è mai stata spiegata per intero. Se ne trovi qualcuno, fammelo sapere. "
Ankitp,

Ok grazie. Il modo in cui viene fuori è ambiguo. Ad esempio "Ho anche cercato ..." & "Qualsiasi ulteriore riferimento a documenti o implementazioni sarebbe di grande aiuto". Tieni presente che il CV è un sito di domande e risposte, non un forum di discussione. Perché non fare il nostro tour e saperne di più sul sito?
gung - Ripristina Monica

-1

Non penso che il metodo di allenamento basato sul livello sia corretto. Ad esempio, l'architettura dell'encoder automatico convoluzionale è:

input-> conv-> max_poo-> de_max_pool-> de_conv-> uscita.

Questo è un codificatore automatico e dovrebbe essere addestrato con l'intera architettura. Inoltre, non esiste un criterio rigoroso se un codificatore automatico convoluzionale abbia bisogno di pool e un_pool. di solito, un pool ma senza un_pool. Ecco un confronto sperimentale con l'assenza di pool e un_pool.

https://arxiv.org/pdf/1701.04949.pdf

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.