Kle*_*ios 3 tensorflow tensorflow-datasets tensorflow2.0
我正在使用 TF 2.2,并尝试使用 tf.data 创建管道。
以下工作正常:
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 image, label
# TrainDS Pipeline
trainDS = getDataset()
trainDS = trainDS.shuffle(size['train'])
trainDS = trainDS.map(load_image, num_parallel_calls=AUTOTUNE)
for d in trainDS:
print('Image: {} - Label: {}'.format(d[0], d[1]))
Run Code Online (Sandbox Code Playgroud)
我想将load_image()与 一起使用Dataset.interleave()。然后我尝试:
# TrainDS Pipeline
trainDS = getDataset()
trainDS = trainDS.shuffle(size['train'])
trainDS = trainDS.interleave(lambda x, y: load_image_with_label(x, y), cycle_length=4)
for d in trainDS:
print('Image: {} - Label: {}'.format(d[0], d[1]))
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
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)
Run Code Online (Sandbox Code Playgroud)
如何调整我的代码以并行Dataset.interleave()读取load_image()图像?
正如错误所示,您需要修改load_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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2071 次 |
| 最近记录: |