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的评论部分。
我正在尝试使用 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的评论部分。