es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Misma forma para archivos de dataset de audio .wav.

Estoy creando un tipo de red neuronal ANN que pueda clasificar si quien habla soy yo o no, pero el problema es que no puedo entrenarla debido a la forma de mis datos.

Los datos X son:
(262144,)

Los datos y son:
(261768,)

¿Cómo puedo hacer que los archivos de audio .wav tengan la misma forma?

Aquí está todo el código:

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')

# Mis datos de voz
for path in pathlist:
    filename = str(path)

    # convertir audio a matriz numpy y luego de 2D a 1D np Array
    samplerate, data = wavfile.read(filename)
    data = data.flatten()

pathlist2 = Path(os.path.abspath('Voiceclassification/Data/other/')).rglob('*.wav')

# Otros datos de voz
for path2 in pathlist2:
    filename2 = str(path2)

    samplerate2, data2 = wavfile.read(filename2)
    data2 = data2.flatten()


### ADAPTACIÓN DE LOS DATOS PARA EL MODELO
X = data # Mi voz
y = data2 # Otros datos
#print(X.shape)
#print(y.shape)

### Entrenamiento del modelo
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=0)

# Realizando un escalado futuro
sc = StandardScaler()

x_train = sc.fit_transform(x_train)
x_test = sc.transform(x_test)

### Creación de la ANN
ann = tf.keras.models.Sequential()

# Primera capa oculta de la ann
ann.add(tf.keras.layers.Dense(units=6, activation="relu"))
# Segunda capa oculta
ann.add(tf.keras.layers.Dense(units=6, activation="relu"))
# Capa de salida
ann.add(tf.keras.layers.Dense(units=6, activation="sigmoid"))

# Compilando nuestra red neuronal
ann.compile(optimizer="adam",
            loss="binary_crossentropy",
            metrics=['accuracy'])

# Ajustando la ANN
ann.fit(x_train, y_train, batch_size=32, epochs=100)
ann.save('train_model.model')

¿Algún idea?, en total tengo 18 archivos .wav para cada X o y.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que sus datos X son una matriz unidimensional con 262144 elementos, mientras que sus datos y son una matriz unidimensional con solo 261768 elementos. Para usar estos datos para entrenar una ANN, tanto los datos de entrada como de salida necesitan tener la misma forma.

    Una solución sería procesar sus archivos de audio y convertirlos a un tamaño fijo, para que todos tengan el mismo número de elementos. Esto se puede lograr utilizando técnicas como el relleno con ceros, donde los datos de audio se rellenan con ceros para hacerlos del tamaño deseado, o bien mediante el submuestreo o sobre-muestreo de los datos a una tasa de muestra común.

    Una vez que sus datos tengan el mismo formato, puede utilizarlos para entrenar su ANN. Tenga en cuenta que el entrenamiento de una ANN para el reconocimiento de voz puede ser una tarea computacionalmente intensiva, por lo que puede considerar el uso de técnicas como el aprendizaje por transferencia o modelos pre-entrenados para acelerar el proceso de entrenamiento.

Comments are closed.