火炬 - 使用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的评论部分。