【发布时间】:2016-05-07 14:50:18
【问题描述】:
我正在尝试在多类人脸图像数据集上微调预训练的 OverFeat 卷积网络 (CNN)。我的训练测试 lua 脚本基于给定的教程 here。
我首先创建了一个脚本,并尝试通过对 ImageNet 数据集的子集进行训练测试来测试我的脚本。解决一些问题后,它按预期工作,没有任何错误。但是,随后我对脚本进行了细微更改,例如在神经网络中添加几层,更改输入文件和标签,以使其适应新的数据集。我要微调的更新模型如下:
net:add(SpatialConvolution(3, 96, 7, 7, 2, 2))
net:add(nn.ReLU(true))
net:add(SpatialMaxPooling(3, 3, 3, 3))
net:add(SpatialConvolutionMM(96, 256, 7, 7, 1, 1))
net:add(nn.ReLU(true))
net:add(SpatialMaxPooling(2, 2, 2, 2))
net:add(SpatialConvolutionMM(256, 512, 3, 3, 1, 1, 1, 1))
net:add(nn.ReLU(true))
net:add(SpatialConvolutionMM(512, 512, 3, 3, 1, 1, 1, 1))
net:add(nn.ReLU(true))
net:add(SpatialConvolutionMM(512, 1024, 3, 3, 1, 1, 1, 1))
net:add(nn.ReLU(true))
net:add(SpatialConvolutionMM(1024, 1024, 3, 3, 1, 1, 1, 1))
net:add(nn.ReLU(true))
net:add(SpatialMaxPooling(3, 3, 3, 3))
net:add(SpatialConvolutionMM(1024, 4096, 5, 5, 1, 1))
net:add(nn.ReLU(true))
net:add(SpatialConvolutionMM(4096, 4096, 1, 1, 1, 1))
net:add(nn.ReLU(true))
net:add(SpatialConvolutionMM(4096, 1000, 1, 1, 1, 1))
-- net:add(nn.View(1000))
net:add(nn.ReLU(true))
net:add(SpatialConvolutionMM(1000, 530, 1, 1, 1, 1))
net:add(nn.View(530))
net:add(nn.SoftMax())
我正在使用 nn.ClassNLLCriterion() 来训练我的网络。但在训练时,我面临以下错误:
==> online epoch # 1 [batchSize = 8]
/home/adarshc/torch/install/bin/luajit: ...shc/torch/install/share/lua/5.1/nn/ClassNLLCriterion.lua:38: attempt to call method 'type' (a nil value)
stack traceback:
...shc/torch/install/share/lua/5.1/nn/ClassNLLCriterion.lua:38: in function 'forward'
final_2.lua:486: in function 'opfunc'
/home/adarshc/torch/install/share/lua/5.1/optim/sgd.lua:43: in function 'optimMethod'
final_2.lua:509: in function 'train'
final_2.lua:613: in main chunk
[C]: in function 'dofile'
...rshc/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:131: in main chunk
[C]: at 0x00406670
我无法解决它,因为我发现此错误没有提供信息,因此难以跟踪和调试。有人可以帮我解决这个问题吗?
提前致谢。
【问题讨论】:
-
包括产生错误的整个代码以及示例数据。此外 - 为了调试,将你的网络简化为简单的东西,你有 10 层!如果您的参数有任何错误,将很难捕捉到它,此外,这样的模型将需要大量时间来训练,而且它似乎是您的第一个方法之一,您永远不应该从如此复杂的事情开始.
-
@lejlot,我从这种复杂性开始,因为就我而言,这是最简单的开始。我本可以包含整个代码,但它足够大,可以简单地在问题中引用它。另外,由于我遇到了编译器错误,我认为我正在期待我可能会犯的某种常见错误。我在问题本身中提到的对我来说更令人费解的事情是,我在不同的数据集上使用了几乎相同的过程,并且它按预期工作得很好。我只是对其进行了一些修改以使其适应新的数据集,但我得到了错误。
-
不,不是。拥有两个卷积层就足以开始并了解您的错误是什么
标签: lua machine-learning torch conv-neural-network