火炬 - 使用CNN的优化包

问题描述:

我想用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)的最佳方法是什么?

模块nn.View未被正确写入。该图层应该写为: nn.View(−1, out_channels * out_height * out_width)。在上述情况下,它将是 nn.View(-1, 2048)来源:请参阅this的评论部分。