Можно ли сопоставить функцию NumPy с tf.data.dataset? - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть следующий простой код:

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.

1 Ответ

1 голос
/ 23 апреля 2019

Этого можно добиться с помощью функции tf.py_func или tf.py_function (это более новая версия).Он делает именно то, что вы хотите, он обернет вашу функцию numpy, которая работает с массивами, в операцию тензорного потока, которую вы можете включить в свой граф набора данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...