2017-04-01 3 views
0

J'essaie de former un CNN en utilisant le package optim. J'utilise this code, obtenu à partir d'un video tutorial (voir autour de 24:01), comme référence. Cet exemple particulier utilise un réseau neuronal normal. J'ai également utilisé this reference. Mon code pour le CNN peut être trouvé here. Le problème est que si l'entrée X n'est pas une seule image, je reçois une erreur:Torch - Utilisation du package optim avec CNN

In 14 module of nn.Sequential: 
/home/ubuntu/torch/install/share/lua/5.1/nn/Linear.lua:57: size mismatch at /tmp/luarocks_cutorch-scm-1-1695/cutorch/lib/THC/generic/THCTensorMathBlas.cu:52 

Quand je n'utilise GPU, l'erreur devient plus claire:

size mismatch, [1024 x 2048], [409600] 

Pour plus de commodité, J'ai copié mon modèle complet:

-- Model begins 
local model = nn.Sequential() 
model:add(nn.SpatialConvolution(1, 64, 3, 3)) 
model:add(nn.ReLU()) 
model:add(nn.SpatialMaxPooling(2, 2, 2, 2)) 

model:add(nn.SpatialConvolution(64, 128, 3, 3)) 
model:add(nn.ReLU()) 
model:add(nn.SpatialMaxPooling(2, 2, 2, 2)) 

model:add(nn.SpatialConvolution(128, 256, 3, 3)) 
model:add(nn.ReLU()) 
model:add(nn.SpatialMaxPooling(2, 2, 2, 2)) 

model:add(nn.SpatialConvolution(256, 512, 3, 3)) 
model:add(nn.ReLU()) 
model:add(nn.SpatialMaxPooling(2, 2, 2, 2)) 

model:add(nn.View(-1)) 
model:add(nn.Linear(2048, 1024)) 
model:add(nn.ReLU()) 
model:add(nn.Linear(1024, 5)) 
model:add(nn.LogSoftMax()) 
-- Model ends 

1) Est-il juste d'utiliser nn.View(-1)?

2) Je comprends que l'entrée de la première couche Linear n'est pas 2048 lorsque l'entrée X a plus d'une image. Mais comment optim.sgd fonctionne-t-il correctement avec tout l'ensemble d'apprentissage utilisé comme entrée (X), dans le cas du réseau de neurones normal donné en première référence?

3) Quelle serait la meilleure façon d'utiliser optim.sgd (ou de préférence optim.adam) dans ce problème?

Répondre

0

Le module nn.View n'a pas été écrit correctement. Cette couche doit être écrite comme suit: nn.View(−1, out_channels * out_height * out_width). Dans le cas ci-dessus, ce serait nn.View(-1, 2048). Source: Voir la section des commentaires de this.