#python #machine-learning #neural-network #dataset
#питон #машинное обучение #нейронная сеть #набор данных
Вопрос:
Итак, я создаю нейронную сеть типа ANN, которая может классифицировать, говорю я или нет, проблема в том, что я могу обучить ее из-за формы моих данных.
Данные X являются
(262144,)
данные y
(261768,)
Как я могу сделать данные моих аудиофайлов .wav одинаковой формы?
Вот мой полный код
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')
Любая идея, в общей сложности у меня есть 18 файлов .wav для каждого X или y
Ответ №1:
Вы можете использовать scipy.io для wav-файлов перепишите файл длиной всего 5 секунд, я создам этот небольшой код, который поможет вам
def trim_wav( originalWavPath, newWavPath , start, new ): sampleRate, waveData = wavfile.read( originalWavPath ) startSample = int( start * sampleRate ) endSample = int( new * sampleRate ) wavfile.write( newWavPath, sampleRate, waveData[startSample:endSample]) wp = "path of the wav file" trim_wav(wp, wp.replace(".wav", ".wav"), 0,5)
Это позволит обрезать ваши аудиофайлы и избавиться от миллисекунд, которые не меняют форму ваших данных