Tensorflow py_func TypeError,带有tf.data.Dataset输出

问题描述 投票:0回答:1

我试图使用py_func从函数返回数据集,以在tensorflow Dataset管道/ api中使用。但是,py_func会抛出一个错误:

TypeError: Expected DataType for argument 'Tout' not <class 'tensorflow.python.data.ops.dataset_ops.Dataset'>.

最小的例子如下:

import tensorflow as tf
import numpy as np


def fn(x, y):
    a = tf.data.Dataset_from_tensors((x, y))
    b = tf.data.Dataset_from_tensors((x, y))
    return a.concatenate(b)

if __name__ == "__main__":
    features = np.random.rand(5, 5, 5, 1)
    labels = np.random.rand(5, 5)

    dataset = tf.data.Dataset.from_tensors((features, labels))
    dataset = dataset.flat_map(
        lambda feature, label:  tuple(tf.py_func(
            fn, [feature, label], [tf.data.Dataset])))
    iterator = dataset.make_one_shot_iterator()
    next_element = iterator.get_next()
    sess = tf.Session()
    val = sess.run(next_element)

这是张量流的错误,还是我错误地使用了api?谢谢!

python tensorflow tensorflow-datasets
1个回答
0
投票

当等效的Tensorflow API不容易获得时,tf.py_func使我们能够包装python代码。

我认为它无法返回Tensorflow类。

作为一个例子,我复制了我在另一个帖子中发布的代码。此代码使用Python API来格式化从文件中读取的日期。返回的数据类型是Tensorflow数据类型。

tf.py_func方便地无缝地包含在数据管道中,受API doc.中提到的限制

import tensorflow as tf
from datetime import datetime


sess = tf.Session()

#Could be refactored
def convert_to_date(text):
    date = datetime.strptime(text.decode('ascii'), '%b %d %Y %I:%M%p')
    return date.strftime('%b %d %Y %I:%M%p')

filenames = ["C:/Machine Learning/text.txt"]

dataset = tf.data.Dataset.from_tensor_slices(filenames)

tf.data.TextLineDataset
dataset = dataset.flat_map(
                   lambda filename :
                   tf.data.TextLineDataset( filename ) ).map( lambda text :
                                                                        tf.py_func(convert_to_date,
                                                                                  [text],
                                                                                  [tf.string]))
iterator = dataset.make_one_shot_iterator()
date = iterator.get_next()


print(sess.run([date]))
© www.soinside.com 2019 - 2024. All rights reserved.