6

Ho letto di reti neurali convoluzionali dal here. Poi ho iniziato a giocare con torch7. Sto avendo confusione con lo strato convoluzionale di una CNN.Problemi nella comprensione della rete neurale involontaria

dal tutorial,

The neurons in a layer will only be connected to a small region of the layer before it, instead of all of the neurons in a fully-connected manner.

For example, suppose that the input volume has size [32x32x3], (e.g. an RGB CIFAR-10 image). If the receptive field is of size 5x5, then each neuron in the Conv Layer will have weights to a [5x5x3] region in the input volume, for a total of 5*5*3 = 75 weights.

se il livello di ingresso è [32x32x3], CONV layer will compute the output of neurons that are connected to local regions in the input, each computing a dot product between their weights and the region they are connected to in the input volume. This may result in volume such as [32x32x12].

Ho iniziato a giocare con ciò che un livello CONV potrebbe fare a un'immagine. L'ho fatto a torch7. Qui è la mia realizzazione,

require 'image' 
require 'nn' 

i = image.lena() 

model = nn.Sequential() 
model:add(nn.SpatialConvolutionMM(3, 10, 5, 5)) --depth = 3, #output layer = 10, filter = 5x5 

res = model:forward(i) 
itorch.image(res) 
print(#i) 
print(#res) 

uscita cnn transformation

3 
512 
512 
[torch.LongStorage of size 3] 

    10 
508 
508 
[torch.LongStorage of size 3] 

Ora vediamo la struttura di una CNN

CNN

Quindi, le mie domande sono,

0.123.516,410617 millions

Domanda 1

La convoluzione è stata eseguita in questo modo: diciamo che prendiamo un'immagine 32x32x3. E c'è il filtro 5x5. Quindi il filtro 5x5 passerà attraverso l'intera immagine 32x32 e produrrà le immagini contorte? Ok, filtro scorrevole 5x5 su tutta l'immagine, otteniamo un'immagine, se ci sono 10 livelli di output, otteniamo 10 immagini (come si vede dall'output). Come li otteniamo? (Vedere l'immagine per chiarimenti se necessario)

enter image description here

Domanda 2

Qual è il numero di neuroni nello strato conv? È il numero di livelli di output? Nel codice che ho scritto sopra, model:add(nn.SpatialConvolutionMM(3, 10, 5, 5)). È il 10? (numero di livelli di output?)

Se così il punto numero 2 non ha alcun senso. Secondo quello If the receptive field is of size 5x5, then each neuron in the Conv Layer will have weights to a [5x5x3] region in the input volume, for a total of 5*5*3 = 75 weights. Quindi quale sarà il peso qui? Sono molto confuso in questo. Nel modello definito nella torcia, non c'è peso. Quindi, come il peso sta giocando un ruolo qui?

Qualcuno può spiegare cosa sta succedendo?

risposta

8

La convoluzione è stata eseguita in questo modo: diciamo che prendiamo un'immagine 32x32x3. E c'è il filtro 5x5. Quindi il filtro 5x5 passerà attraverso l'intera immagine 32x32 e produrrà le immagini contorte?

Per un'immagine di input 32x32x3 un filtro 5x5 scorre su ogni singolo pixel e per ogni pixel guarda il quartiere 5x5. Quel quartiere contiene 5 * 5 * 3 = 75 valori.Di seguito è riportata un'immagine di esempio per un filtro 3x3 su un singolo canale di input, ovvero uno con un intorno di 3 * 3 * 1 valori (source).

convolution

Per ogni individuo prossimo il filtro avrà un parametro (alias peso), quindi 75 parametri. Quindi per calcolare un singolo valore di uscita (valore a pixel x, y) legge quei valori vicini, moltiplica ciascuno con il rispettivo parametro/peso e li aggiunge alla fine (vedere discrete convolution). I pesi ottimali devono essere appresi durante l'allenamento.

Quindi un filtro itererà sull'immagine e genererà un nuovo output, pixel per pixel. Se si dispone di più filtri (ad esempio il secondo parametro in SpatialConvolutionMM è> 1) si ottengono più uscite ("piani" nella torcia).

approvazione, in modo scorrevole filtro 5x5 tutta l'immagine, si ottiene un'immagine, se ci sono 10 strati di uscita, otteniamo 10 immagini (come si vede dalla uscita). Come li otteniamo? (vedere l'immagine per chiarimenti se necessario)

Ogni piano di uscita viene generato dal proprio filtro. Ogni filtro ha i propri parametri (5 * 5 * 3 parametri nell'esempio). Il processo per più filtri è esattamente lo stesso di uno.

Qual è il numero di neuroni nel livello conv? È il numero di livelli di output? Nel codice che ho scritto sopra, modello: add (nn.SpatialConvolutionMM (3, 10, 5, 5)). È il 10? (numero di livelli di output?)

Dovresti chiamarli pesi o parametri, i "neuroni" non sono adatti per i livelli convoluzionali. Il numero di parametri è, come descritto, 5 * 5 * 3 = 75 per filtro nel tuo esempio. Dato che hai 10 filtri ("piani di output") hai 750 parametri totali. Se aggiungi un secondo livello alla tua rete con model:add(nn.SpatialConvolutionMM(10, 10, 5, 5)), avresti un ulteriore 5 * 5 * 10 = 250 parametri per filtro e 250 * 10 = 2500 totali. Nota come questo numero può crescere rapidamente (512 filtri/piani di output in un livello che operano su 256 piani di input non è raro).

Per ulteriori informazioni, consultare http://neuralnetworksanddeeplearning.com/chap6.html. Scorri fino al capitolo "Introduzione alle reti convoluzionali". Sotto "Campi ricettivi locali" ci sono visualizzazioni che probabilmente ti aiuteranno a capire che cosa fa un filtro (uno è stato mostrato sopra).

1

responsabilità: Le informazioni che ho fornito di seguito è in gran parte estratto dai seguenti documenti: Information Processing in Gatti Area visiva Gradient Based Learning applicata al documento di riconoscimento Neocortigan ricettivo campi in Visual Cortex del gatto

La convoluzione è fatta così - diciamo che prendiamo un'immagine 32x32x3. E c'è il filtro 5x5. Quindi il filtro 5x5 passerà attraverso l'intera immagine 32x32 e produrrà le immagini contorte?

Sì, un filtro 5x5 passerà attraverso l'intera immagine creando un'immagine RGB 28x28. Ogni unità nella cosiddetta "mappa delle caratteristiche" riceve input 5x5x3 collegati a un'area 5x5 nell'immagine di input (questo quartiere 5x5 è chiamato "campo locale di ricezione" dell'unità). I campi ricettivi delle unità adiacenti (adiacenti) in una mappa caratteristica sono centrati su unità adiacenti (adiacenti) nel livello precedente.

approvazione, in modo scorrevole filtro 5x5 tutta l'immagine, si ottiene un'immagine, se ci sono 10 strati di uscita, otteniamo 10 immagini (come si vede dalla uscita). Come li otteniamo? (Vedere l'immagine per chiarimenti se necessario)

Nota che le unità sulla quota di funzionalità layer lo stesso insieme di creature e di eseguire la stessa operazione su diverse parti dell'immagine. (Cioè se si sposta l'immagine originale, anche l'output sulla mappa delle caratteristiche cambierà dello stesso importo). Cioè, per ogni mappa caratteristica vincoli il set di pesi per essere uguale per ogni unità; hai solo pesi sconosciuti 5x5x3.

A causa di questo vincolo, e dal momento che vogliamo estrarre quante più informazioni possibili dall'immagine, aggiungiamo più livelli, mappe di caratteristiche: avere più mappe di caratteristiche ci aiuta ad estrarre più funzionalità a ogni pixel.

Purtroppo non ho familiarità con Torch7.

Problemi correlati