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?