Keras - Как обрабатывать волновые входы различной длины, разбивать тренировочные данные на партии - PullRequest
0 голосов
/ 05 июня 2018

Я новичок в использовании инфраструктуры Keras для реализации нейронных сетей, а также проверил некоторые очень простые вещи о Tensorflow.

Я пытаюсь выяснить, как разделить мои тренировочные данные (коэффициенты mfcc файлов .wav) на пакеты, чтобы соответствовать моей модели, а также как обрабатывать выборки различной длительности (и, следовательно, различной формы в формате mfcc).).

Я наткнулся на следующий фрагмент кода в Tensorflow, но не могу понять, как он работает для реализации чего-то подобного в Keras.Буду очень признателен за любую помощь в «преобразовании» кода в логику Keras или в целом в моих вопросах.Спасибо.

    label = [] # output label of each file 
    mfcc_file = [] # filenames of all .npy files containing mfcc coeffs

    # Load from corresponding files and fill in label, mfcc_file
    # .... 

    # to constant tensor
    label_t = tf.convert_to_tensor(label)
    mfcc_file_t = tf.convert_to_tensor(mfcc_file)

    # create queue from constant tensor
    label_q, mfcc_file_q \
        = tf.train.slice_input_producer([label_t, mfcc_file_t], shuffle=True)

    # create label, mfcc queue
    label_q, mfcc_q = self.load_mfcc([label_q, mfcc_file_q])

    # create batch queue with dynamic pad
    batch_queue = tf.train.batch([label_q, mfcc_q], batch_size,
                                 shapes=[(None,), (20, None)],
                                 num_threads=64, capacity=batch_size*32,
                                 dynamic_pad=True)

    # split data
    self.label, self.mfcc = batch_queue
    # batch * time * dim
    self.mfcc = self.mfcc.sg_transpose(perm=[0, 2, 1])
    # calc total batch count
    self.num_batch = len(label) // batch_size

    # print info
    tf.sg_info('%s set loaded.(total data=%d, total batch=%d)'
               % (set_name.upper(), len(label), self.num_batch))
...