2016-11-06 1 views
1

Ich versuche gerade ein Regressionsnetzwerk zum Zwecke der Extraktion von MFCC-Funktionen. Die Eingabe für das Netzwerk ist Sampling und gerahmten Audiodateien, die ich habe Probleme zu tun, oder tun Sie es auf eine Weise, dass ich eine konsistente Ausgabe erhalten - das heißt eine konsistente Bildgröße, da es nicht als Eingabe arbeiten würde für ein neurales Netzwerk.Wie stelle ich eine einheitliche Bildgröße zwischen einzelnen Audiodateien sicher?

ich derzeit Abtasten und Framing jede Audiodatei als solche:

def load_sound_files(file_paths , data_input): 
    raw_sounds = [] 
    data_output = [] 
    for fp in file_paths: 
     y,sr = librosa.load(fp) 
     X = librosa.util.frame(y) 
     raw_sounds.append(X) 
    return raw_sounds 

Was bedeutet, dass für jede Audio auf eine Liste angehängt wird, und innerhalb jeder Liste ist ein Array mit der Rahmen-Audiodatei.

[array([[frame],[frame],...,[frame]],dtype=float32), ...] 

ich versucht, diesen Druck

print raw_sounds[0].shape 
print raw_sounds[1].shape 

Und bekam dieses Ergebnis

(2048, 121) 
(2048, 96) 

Aber warum ich dieses Ergebnis bin immer? Ich ändere nichts bezüglich der Rahmenoptionen, also warum sind sie anders?

Und wenn es keine Möglichkeit gibt, es konsistent zu halten, wie würde irgendjemand ein neuronales Netzwerk trainieren, das in der Lage ist, dies mit einer inkonsistenten Eingabe zu tun?

Antwort

1

Ihre Ergebnisse

(2048, 121) 
(2048, 96) 

gibt die Länge Rahmen und die Anzahl der Frames. Die Rahmengrößen sind also eigentlich die einheitlich 2048 Samples lang. Der einzige Unterschied zwischen den beiden ist, dass es 121 Frames für die erste Sounddatei und 96 für die zweite gibt.

0

Audiodateien sind Sequenzen mit unterschiedlicher Länge.

Es gibt mehrere Möglichkeiten, mit Eingaben mit variabler Länge umzugehen. Normalerweise speist man die Eingabe, die eine feste Dimension hat, mehrmals für jedes Audiorahmen in ein neuronales Netz ein. Dann lernt das Netzwerk von der Sequenz unter Verwendung einer Architektur wie RNN, LSTM oder seq2seq (die sich im Fluss befindet, aber in contrib/seq2seq). Sie können auch eine einfache DNN-Architektur (Feed-Forward-Architektur) verwenden.

Verwandte Themen