У меня такое же количество файлов, и они все еще имеют разную форму, ЭНН машинное обучение

#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 секунды без миллисекунд