2017-06-17 1 views
1

Je veux construire un CNN dans Torch pour classer de (petits) enregistrements audio. J'ai quelques échantillons, chacun avec 16608x1 échantillons (je peux les compresser s'ils sont trop gros). Il y a environ 300 échantillons (900 si nécessaire, mais je veux d'abord essayer avec ce petit ensemble) pour être classés en 30 classes.CNN temporel pour classer les sons: cur_target assertion

Voici ce que j'ai écrit jusqu'à présent:

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()) 

-- class setup 
-- mean to 0, stdv to 1 

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

Quand je lance, il y a une erreur dans ClassNLLCriterion.c avec l'erreur sur le assertion (cur_target >= 0 && cur_target < n_classes).

En outre, tous les numéros sont expérimentaux et je suis expérimenter (ce qui est l'un de mes premier CNN)

Répondre

0

Il semble que votre classe cible est hors de portée. Vous avez défini le réseau comme ayant 30 classes comme sortie de votre réseau, mais peut-être votre rame a < 1 ou> 30 classes.

Notez également que les classes de torche sont indexées de 1 à N.

+0

Oui! J'utilisais 30 valeurs différentes, mais je ne savais pas qu'elles devaient être {1, .., 30}. Il en est de même, tellement de slooow ... y a-t-il un paramètre qui est faux? @frankyjuang – pewul