Tensorflow 如何将TF2中的tf.data.Dataset.interleave()与自定义函数一起使用?

Tensorflow 如何将TF2中的tf.data.Dataset.interleave()与自定义函数一起使用?,tensorflow,tensorflow2.0,tensorflow-datasets,Tensorflow,Tensorflow2.0,Tensorflow Datasets,我正在使用tf2.2,我正在尝试使用TF.data创建一个管道 以下工作很好: def load_图像(文件路径、标签): 打印('加载文件:{}'+filePath) 原始字节=tf.io.read\u文件(文件路径) image=tf.io.decode\u image(原始字节,展开动画=False) 返回图像、标签 #铁路管道 trainDS=getDataset() trainDS=trainDS.shuffle(大小['train']) trainDS=trainDS.map(加载映

我正在使用tf2.2,我正在尝试使用TF.data创建一个管道

以下工作很好:

def load_图像(文件路径、标签):
打印('加载文件:{}'+filePath)
原始字节=tf.io.read\u文件(文件路径)
image=tf.io.decode\u image(原始字节,展开动画=False)
返回图像、标签
#铁路管道
trainDS=getDataset()
trainDS=trainDS.shuffle(大小['train'])
trainDS=trainDS.map(加载映像,并行调用数=AUTOTUNE)
对于d in列车:
打印('Image:{}-标签:{}'。格式(d[0],d[1]))
我想将
load\u image()
Dataset.interleave()
一起使用。然后我试着:

#列车管道
trainDS=getDataset()
trainDS=trainDS.shuffle(大小['train'])
trands=trands.交错(λx,y:加载带有标签(x,y)的图像,循环长度=4)
对于d in列车:
打印('Image:{}-标签:{}'。格式(d[0],d[1]))
但我得到了以下错误:

Exception has occurred: TypeError
`map_func` must return a `Dataset` object. Got <class 'tuple'>
  File "/data/dev/train_daninhas.py", line 44, in <module>
    trainDS = trainDS.interleave(lambda x, y: load_image_with_label(x, y), cycle_length=4)
发生异常:TypeError `map_func`必须返回一个`Dataset`对象。得到 文件“/data/dev/train_daninhas.py”,第44行,在 trands=trands.交错(λx,y:加载带有标签(x,y)的图像,循环长度=4)
如何调整我的代码以使
Dataset.interleave()
使用
load\u image()
并行读取图像?

如错误所示,您需要修改
load\u image
以使其返回
Dataset
对象,我已经展示了一个示例,其中有两幅图像介绍了如何在
tensorflow 2.2.0
中进行此操作:

import tensorflow as tf
filenames = ["./img1.jpg", "./img2.jpg"]
labels = ["A", "B"]

def load_image(filePath, label):
    print('Loading File: {}' + filePath)
    raw_bytes = tf.io.read_file(filePath)
    image = tf.io.decode_image(raw_bytes, expand_animations = False)
    return tf.data.Dataset.from_tensors((image, label))

dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))
dataset = dataset.interleave(lambda x, y: load_image(x, y), cycle_length=4)

for i in dataset.as_numpy_iterator():
    image = i[0]
    label = i[1]
    print(image.shape)
    print(label.decode())

# (275, 183, 3)
# A
# (275, 183, 3)
# B

希望这有帮助

下面的解决方案有效吗?@ParthasarathySubburaj是的。我还在努力。谢谢