#python #machine-learning #neural-network #dataset
Вопрос:
Я пытаюсь создать нейронную сеть с помощью python, это своего рода сеть ANN для использования в задаче классификации. Цель нейронной сети — классифицировать говорящего, будь то я или кто-то другой. У меня есть данные в 2 папках. папки изображают, что одна называется «я«, это аудиозаписи того, как я говорю, а другая называется «другие«, аудиозаписи говорящих других людей. Просмотр файлов wav(аудиоданных)
Проблема в том, что он не может обучить сеть, потому что данные не одинаковой длины, и если это так!, в каждой папке их 18, ни на одну больше, ни на одну меньше.
Когда я это сделаю
print(X.shape) print(y.shape)
дает это. Результат форм X, y Это не та же форма, даже если в каждой папке 18 аудиофайлов
model.py
from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler import tensorflow as tf import numpy as np from scipy.io import wavfile from pathlib import Path import os ### DATASET pathlist = Path(os.path.abspath('Voiceclassification/Data/me/')).rglob('*.wav') # My voice data for path in pathlist: filename = str(path) # convert audio to numpy array and then 2D to 1D np Array samplerate, data = wavfile.read(filename) #print(f"sample rate: {samplerate}") data = data.flatten() #print(f"data: {data}") pathlist2 = Path(os.path.abspath('Voiceclassification/Data/other/')).rglob('*.wav') # other voice data for path2 in pathlist2: filename2 = str(path2) samplerate2, data2 = wavfile.read(filename2) data2 = data2.flatten() #print(data2) ### ADAPTING THE DATA FOR THE MODEL X = data # My voice y = data2 # Other data #print(X.shape) #print(y.shape) ### Trainig the model x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=0) # Performing future scaling sc = StandardScaler() x_train = sc.fit_transform(x_train) x_test = sc.transform(x_test) ### Creating the ANN ann = tf.keras.models.Sequential() # First hidden layer of the ann ann.add(tf.keras.layers.Dense(units=6, activation="relu")) # Second one ann.add(tf.keras.layers.Dense(units=6, activation="relu")) # Output layer ann.add(tf.keras.layers.Dense(units=6, activation="sigmoid")) # Compile our neural network ann.compile(optimizer="adam", loss="binary_crossentropy", metrics=['accuracy']) # Fit ANN ann.fit(x_train, y_train, batch_size=32, epochs=100) ann.save('train_model.model')
Есть идеи?
Комментарии:
1. Вы должны использовать какой-то тип сети, который позволяет обрабатывать данные разной длины.. это тот тип nn, который используется для такого рода работ
2. @UlisesBussi, как я могу это сделать?
3. проверьте рекурсивные нейронные сети и трансформаторы… У меня нет твоего решения.
4. кроме того, учитывая небольшой объем данных, вы, возможно, захотите проверить наличие состязательных сетей. Я не эксперт, но я думаю, что это хорошее начало
Ответ №1:
Это связано с тем, что ваши аудиофайлы wav могут иметь разные размеры, они могут составлять всего 10 секунд, но если миллисекунда отличается, это повлияет на форму ваших данных, что вы можете сделать, это обрезать ваши файлы wav так, чтобы все они были 10,00 секунды без миллисекунд