Torch - 在 CNN 中使用优化包

Torch - Using optim package with CNN

我正在尝试使用 optim 包训练 CNN。我正在使用 this code, obtained from a video tutorial (see around 24:01), as a reference. This particular example uses a normal neural network. I also used this reference

可以找到我的 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的评论部分。