Я пытаюсь извлечь функции из файлов .wav, используя MFCC звуковых файлов. Я получаю сообщение об ошибке, когда пытаюсь преобразовать свой список MFCC в массив numpy. Я совершенно уверен, что эта ошибка возникает, потому что список содержит значения MFCC с разными формами (но я не уверен, как решить проблему).
Я просмотрел 2 других сообщения stackoverflow, однако они не решают мою проблему, потому что они слишком специфичны для определенной задачи.
ValueError: не удалось транслировать входной массив из формы (128,128,3) в форму (128,128)
Ошибка значения: могла не транслировать входной массив из формы (857,3) в форму (857)
Полное сообщение об ошибке:
Traceback (последний вызов последним): файл "/..../.../...../Batch_MFCC_Data.py", строка 68, в X = np.array (MFCCs) ValueError: не удалось передать входной массив из формы (20,590) в форму (20)
Пример кода:
all_wav_paths = glob.glob('directory_of_wav_files/**/*.wav', recursive=True)
np.random.shuffle(all_wav_paths)
MFCCs = [] #array to hold all MFCC's
labels = [] #array to hold all labels
for i, wav_path in enumerate(all_wav_paths):
individual_MFCC = MFCC_from_wav(wav_path)
#MFCC_from_wav() -> returns the MFCC coefficients
label = get_class(wav_path)
#get_class() -> returns the label of the wav file either 0 or 1
#add features and label to the array
MFCCs.append(individual_MFCC)
labels.append(label)
#Must convert the training data to a Numpy Array for
#train_test_split and saving to local drive
X = np.array(MFCCs) #THIS LINE CRASHES WITH ABOVE ERROR
# binary encode labels
onehot_encoder = OneHotEncoder(sparse=False)
Y = onehot_encoder.fit_transform(labels)
#create train/test data
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(MFCCs, Y, test_size=0.25, random_state=0)
#saving data to local drive
np.save("LABEL_SAVE_PATH", Y)
np.save("TRAINING_DATA_SAVE_PATH", X)
Вот снимок формы MFCC (из файлов .wav) в массиве MFCC.
Массив MFCCs содержит следующие формы:
...More above...
(20, 423) #shape of returned MFCC from one of the .wav files
(20, 457)
(20, 1757)
(20, 345)
(20, 835)
(20, 345)
(20, 687)
(20, 774)
(20, 597)
(20, 719)
(20, 1195)
(20, 433)
(20, 728)
(20, 939)
(20, 345)
(20, 1112)
(20, 345)
(20, 591)
(20, 936)
(20, 1161)
....More below....
Как вы можете видеть, не все MFCC в массиве MFCC имеют одинаковую форму, и это связано с тем, что записи не имеют одинаковой продолжительности времени. Это причина, по которой я не могу преобразовать массив в массив numpy? Если это проблема, как мне исправить эту проблему, чтобы она имела одинаковую форму во всем массиве MFCC?
Мы будем очень благодарны за любые фрагменты кода для выполнения этого и советы!
Спасибо!
MFCCs = []
содержит только форму или сами массивы? Я имею в виду, что такоеtype(individual_MFCC)
, это массив или просто информация о форме? - person kmario23   schedule 28.12.2017(20, ...)
, 2) вы знаете максимальный размер вашего массива? - person kmario23   schedule 28.12.2017MFCCs
(не массив!) Содержит элементы с именемindividual_MFCC
, и ониnp.array
разной формы. Верный? Допустим, ваши дваindividual_MFCC
- этоnp.array
формы(20,424)
и(20,457)
. Какую форму вы хотите получить, когда вы объедините их в списокMFCCs
и преобразуете вnp.array
? - person FatihAkici   schedule 28.12.2017zeros
. Кроме того, да, определение максимального размера должно быть очень полезным - person kmario23   schedule 28.12.2017(20, 345)
из вашего примера, а затем сделайте все массивы такой формы (т.е. отбросьте оставшиеся столбцы). 2) Измените форму массивов до максимальной формы, т.е. заполните необходимые столбцы значениямиzeros
илиnan
. однако я думаю, что первый подход должен быть хорош. Тогда можно складывать массивы - person kmario23   schedule 28.12.2017