使用Temporal CNN对声音进行分类:cur_target断言

我想在Torch中构建一个CNN来对(小)音频录音进行分类。我有一些样本,每个样本有16608x1个样本(如果它们太大,我可以对它们进行压缩)。要将约300个样本(如果需要的话,900个,但我想首先尝试这个更小的集合)分类为30个类。

目前我已经写了以下代码:

net = nn.Sequential()
-- 1
net:add( nn.TemporalConvolution(1, 640, 1529) )
net:add( nn.TemporalMaxPooling(4) )
net:add( nn.LogSoftMax() )
-- 2
net:add( nn.TemporalConvolution(640, 15, 647) )
net:add( nn.TemporalMaxPooling(9) )
net:add( nn.LogSoftMax() )
-- review
net:add( nn.View(347 * 15) )
net:add( nn.Linear(347 * 15, 450) )
net:add( nn.ReLU() )
net:add( nn.Linear(450, 128) )
net:add( nn.ReLU() )
net:add( nn.Linear(128, 30) )
net:add( nn.LogSigmoid() )

-- 分类设置
-- 平均值为0,标准差为1

criterion = nn.ClassNLLCriterion()
trainer = nn.StochasticGradient(net, criterion)
trainer.learningRate = 0.01
trainer.maxIteration = 15
trainer:train(trainset)

当我运行它时, ClassNLLCriterion.c 中出现错误,错误在 assertion (cur_target >= 0 && cur_target < n_classes) 上。

此外,所有数字都是实验性的,我正在实验(这是我第一个CNN之一)。

点赞
用户3748807
用户3748807

看起来你的目标类超出了范围。你定义了一个输出为30个类的网络,但是也许你的训练集只有 <1 或 >30 个类。

此外,请注意,在Torch中,类的索引从1到N。

2017-06-18 08:15:31