У меня есть следующий простой код:
import tensorflow as tf
import numpy as np
filename = # a list of wav filenames
x = tf.placeholder(tf.string)
def mfcc(x):
feature = # some function written in NumPy to convert a wav file to MFCC features
return feature
mfcc_fn = lambda x: mfcc(x)
# create a training dataset
train_dataset = tf.data.Dataset.from_tensor_slices((x))
train_dataset = train_dataset.repeat()
train_dataset = train_dataset.map(mfcc_fn)
train_dataset = train_dataset.batch(100)
train_dataset = train_dataset.prefetch(buffer_size=1)
# create an iterator and iterate over training dataset
iterator = tf.data.Iterator.from_structure(train_dataset.output_types, train_dataset.output_shapes)
train_iterator = iterator.make_initializer(train_dataset)
with tf.Session() as sess:
sess.run(train_iterator, feed_dict={x: filename})
По сути, код создает объект tf.data.dataset
, который загружает файл wav и преобразует его в функцию mfcc. Здесь преобразование данных происходит в train_dataset.map(mfcc_fn)
, когда я применяю функцию mfcc, написанную в NumPy, ко всем входным данным.
Очевидно, код здесь не работает, потому что NumPy не поддерживает операции с tf.placeholder
объектом. Можно ли сопоставить функцию для ввода в tf.data.dataset
, если мне нужно написать функцию в NumPy? Причина, по которой я не использую встроенное преобразование функций TensorFlow в MFCC, заключается в том, что функция FFT в TensorFlow выдает значительно отличные выходные данные, чем ее аналог NumPy (как показано здесь здесь ), а модель, которую я создаю, склонна к Функции MFCC, созданные с использованием NumPy.