2017-04-01 38 views
0

我想用optim包來訓練一個CNN。我使用this code,從video tutorial(請參閱24:01左右)獲得,作爲參考。這個特殊的例子使用一個正常的神經網絡我也用this reference火炬 - 使用CNN的優化包

我的代碼爲CNN可以找到here。問題是,如果輸入X不是一個單一的形象,我得到一個錯誤:

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 

當我不使用GPU,誤差變得更加清晰:

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

爲了方便起見,我已經複製了我的完整模型:

-- 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)是否正確使用nn.View(-1)

2)據我所知,當輸入X有多個圖像時,輸入到第一個Linear圖層不是2048。但是如果optim.sgd在用作輸入的整個訓練集(X)中正常工作,在第一個參考中給出的正常神經網絡的情況下?

3)在這個問題中使用optim.sgd(或最好是optim.adam)的最佳方法是什麼?

回答

0

模塊nn.View未被正確寫入。該圖層應該寫爲: nn.View(−1, out_channels * out_height * out_width)。在上述情況下,它將是 nn.View(-1, 2048)來源:請參閱this的評論部分。