Python TensorFlow py_函数嵌套输出类型?

Python TensorFlow py_函数嵌套输出类型?,python,tensorflow,tensorflow-datasets,Python,Tensorflow,Tensorflow Datasets,是否可以为TensorFlows指定嵌套输出类型 作为一种特殊情况,我希望py_函数的返回类型为((tf.float32,tf.float32),(tf.float32,tf.float32)),其中各个元素不一定具有相同的维度。是否有办法为py_函数指定此项 正如一些关于这在我的例子中为什么有用的见解一样,我有一个带有文件路径列表的tf.data.Dataset。py_函数采用其中一个文件路径,并从文件中生成一个否定和肯定示例以及相应的标签,从而生成((肯定的_数据,肯定的_标签),(否定的_

是否可以为TensorFlows指定嵌套输出类型

作为一种特殊情况,我希望
py_函数
的返回类型为
((tf.float32,tf.float32),(tf.float32,tf.float32))
,其中各个元素不一定具有相同的维度。是否有办法为
py_函数指定此项


正如一些关于这在我的例子中为什么有用的见解一样,我有一个带有文件路径列表的
tf.data.Dataset
py_函数
采用其中一个文件路径,并从文件中生成一个否定和肯定示例以及相应的标签,从而生成
((肯定的_数据,肯定的_标签),(否定的_数据,否定的_标签))
(注意,标签不一定是单个值,但它们也不是与输入数据相同的形状)。此
py_函数
可以映射到数据集,并且(使用上述结构)有一个水平展平,以生成具有
的训练数据集(数据,标签)
结构化元素。虽然可能有一种变通方法,将数据和标签堆叠在
py_函数中,然后再取消堆叠(或者从py_函数开始完全非结构化,然后才配对),但这会导致混乱和混乱的设置。如果
py_函数
可以直接输出
((tf.float32,tf.float32),(tf.float32,tf.float32))
type,它将导致一个更干净的设置。

tf.py_函数的输出类型不能是嵌套序列。但是,当将
tf.py_函数
tf.data
API一起使用时,您需要创建一个包装函数(
tf_foo
),您可以将输出嵌套在该函数中

import tensorflow as tf

# The python function.
def foo(x):
    return x, x, x, x

# Wrap the python function to make it compatible with `tf.data.Dataset.map`.
def tf_foo(x):
    a, b, c, d = tf.py_function(foo, [x], Tout=[tf.float32, tf.float32, tf.float32, tf.float32])
    return (a, b), (c, d)

dset = tf.data.Dataset.from_tensor_slices([0, 1, 2, 3, 4])
dset.map(tf_foo)
# <MapDataset shapes: ((<unknown>, <unknown>), (<unknown>, <unknown>)),
#  types: ((tf.float32, tf.float32), (tf.float32, tf.float32))>
将tensorflow导入为tf
#python函数。
def foo(x):
返回x,x,x,x
#包装python函数,使其与“tf.data.Dataset.map”兼容。
def tf_foo(x):
a、 b,c,d=tf.py_函数(foo[x],Tout=[tf.float32,tf.float32,tf.float32,tf.float32,tf.float32])
报税表(a、b)、(c、d)
dset=tf.data.Dataset.from_tensor_切片([0,1,2,3,4])
数据集映射(tf_foo)
# 
这也在一个例子中得到了证明