Python 是否可以将NumPy函数映射到tf.data.dataset?

Python 是否可以将NumPy函数映射到tf.data.dataset?,python,numpy,tensorflow,Python,Numpy,Tensorflow,我有以下简单的代码: 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_

我有以下简单的代码:

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)
处,在这里我将用NumPy编写的mfcc函数应用于所有输入数据


显然,这里的代码不起作用,因为NumPy不支持对
tf.placeholder
对象的操作。如果我必须用NumPy编写函数,是否可以将函数映射到输入到
tf.data.dataset
?我之所以不使用TensorFlow内置的MFCC功能转换,是因为TensorFlow中的FFT函数提供的输出与NumPy对应函数(如图所示)显著不同,并且我正在构建的模型易于使用NumPy生成MFCC功能。

您可以使用该函数实现这一点,或者(这是较新的版本)。它完全满足您的需要,它将把在数组上运行的numpy函数包装在tensorflow操作中,您可以将该操作作为数据集图形的一部分包含在内。

该方法确实适用于将numpy数组转换为另一个数组,但如果输入是字符串(文件名),它似乎不起作用。还有其他方法吗?我一开始只能加载文件名,而不是所有音频数据,否则会出现OOM错误。它适用于任何类型的输入。它接受数据集提供的内容,这意味着如果您希望输入为文件名,则应设计数据集以生成文件名。数据集不需要使用ar射线。它们可以处理任何可以表示为张量的东西,字符串也可以。数据集可以处理任何类型的输入,但
tf.py_func
不能。如果我对数据集的输入是文件名,则函数将映射到具有字符串类型的每个文件名,这会导致错误,因为
tf.py_func
需要e输入参数是numpy数组。不管我怎么想。我所需要做的只是使用tensorflow的内置函数将文件解码成数组。谢谢你的回答!因为标题上写着numpy,所以最好在答案中包含指定的数组。