2016-10-19 4 views
0

Итак, я пытаюсь сделать рудиментарный классификатор эмоций, используя pyAudioAnalysis library, и я собрал небольшой набор данных, чтобы проверить, работает ли он. мой код выглядит следующим образом:pyAudioAnalysis, индекс Tuple вне диапазона

from pyAudioAnalysis import audioAnalysis as aA 

aA.trainClassifierWrapper('svm', False, 
         ["C:\Users\gover_000\Desktop\Angry", 
         "C:\Users\gover_000\Desktop\Happy", 
         "C:\Users\gover_000\Desktop\Sad", 
         "C:\Users\gover_000\Desktop\Scared", 
         "C:\Users\gover_000\Desktop\Neutral"], 
         "testSVM") 

Если я выполнить это, он дает эту ошибку:

Traceback (most recent call last) <ipython-input-7-2e5393432e89> in <module>() 
    5      "C:\Users\gover_000\Desktop\Scared", 
    6      "C:\Users\gover_000\Desktop\Neutral"], 
----> 7      "testSVM") 

C:\Users\gover_000\Documents\GitHub\Emotion-Recognition-Prototype\pyAudioAnalysis\audioAnalysis.pyc in trainClassifierWrapper(method, beatFeatures, directories, modelName) 
    88   raise Exception("At least 2 directories are needed") 
    89  aT.featureAndTrain(directories, 1, 1, aT.shortTermWindow, aT.shortTermStep, 
---> 90      method.lower(), modelName, computeBEAT=beatFeatures) 
    91 
    92 

C:\Users\gover_000\Documents\GitHub\Emotion-Recognition-Prototype\pyAudioAnalysis\audioTrainTest.pyc in featureAndTrain(listOfDirs, mtWin, mtStep, stWin, stStep, classifierType, modelName, computeBEAT, perTrain) 
    275  featureNames = ["features" + str(d + 1) for d in range(numOfFeatures)] 
    276 
--> 277  writeTrainDataToARFF(modelName, features, classNames, featureNames) 
    278 
    279  for i, f in enumerate(features): 

C:\Users\gover_000\Documents\GitHub\Emotion-Recognition-Prototype\pyAudioAnalysis\audioTrainTest.pyc in writeTrainDataToARFF(modelName, features, classNames, featureNames) 
    1097  for c, fe in enumerate(features): 
    1098   for i in range(fe.shape[0]): 
-> 1099    for j in range(fe.shape[1]): 
    1100     f.write("{0:f},".format(fe[i, j])) 
    1101    f.write(classNames[c]+"\n") 

IndexError: tuple index out of range 

Я знаю shape[1] должен возвращать столбцы в размерности массива. , но почему он возвращает ошибку здесь

+0

Возможно потому, что 'fe' это вектор, а не матрица. Таким образом, вопрос для исследования - вот почему одна из ваших возможностей 1-мерная - пожалуйста, рассмотрите вопрос по теме с именем библиотеки, а не 'tuples' или' IndexError'. – wrwrwr

+0

Хорошо. И я не могу пометить его именем библиотеки, поскольку он еще не существует –

ответ

1

Хорошо, поэтому я нашел проблему.

Проблема заключалась в том, что у одного из моих классификаторов не было достаточно файлов, это было необходимо по крайней мере 2. поэтому после добавления большего количества он снова работал!

0

Та же проблема может быть связана с разным количеством файлов внутри учебных папок Для Ex:

+Training 
    +Bubble - 6 files 
    +glass - 6 files 
    +bounce - 8 files 

Тогда было бы также генерировать ту же ошибку, потому что он не может генерировать требуемую матрицу массивов (используя dirsWavFeatureExtraction функция внутри audioFeatureExtraction.py).

Решение, которое я нашел, там должно быть такое же количество файлов в папках учебных

Решенный Пример:

+Training 
    +Bubble - 6 files 
    +glass - 6 files 
    +bounce - 6 files