gpt4 book ai didi

python - 了解如何使用 tf.dataset.map()

转载 作者:行者123 更新时间:2023-12-04 01:31:15 28 4
gpt4 key购买 nike

我正在转换一些最初使用 JPEG 作为输入的代码以使用 Matlab MAT 文件。代码包含以下几行:

train_dataset = tf.data.Dataset.list_files(PATH + 'train/*.mat')
train_dataset = train_dataset.shuffle(BUFFER_SIZE)
train_dataset = train_dataset.map(load_image_train)

如果我循环遍历数据集并在 map() 之前打印() 每个元素,我会得到一组带有可见文件路径的张量。

但是,在 load_image_train 函数中,情况并非如此,print() 的输出是:
Tensor("add:0", shape=(), dtype=string)
我想使用 scipy.io.loadmat() 函数从我的 mat 文件中获取数据,但它失败了,因为路径是张量而不是字符串。 dataset.map() 做了什么似乎使文字字符串值不再可见?如何提取字符串以便将其用作 scipy.io.loadmat() 的输入?

如果这是一个愚蠢的问题,对 Tensorflow 来说相对较新,并且仍在试图理解,请道歉。我能找到的很多相关问题的讨论仅适用于 TF v1.1 版本。感谢您的任何帮助!

最佳答案

在下面的代码中,我使用了 tf.data.Dataset.list_files读取图像的 file_path。在 map函数我正在加载图像并执行 crop_central (基本上按照给定的百分比裁剪图像的中心部分,这里我通过 np.random.uniform(0.50, 1.00) 指定了百分比)。

正如您正确提到的,由于文件路径为 tf.string,因此很难读取文件。类型和 load_img或任何其他读取图像文件的函数都需要简单的 string类型。

所以这是你可以做到的 -

  • 您需要使用 tf.py_function(load_file_and_process, [x], [tf.float32]). 装饰您的 map 功能您可以找到更多相关信息 here .
  • 您可以检索 string来自 tf.string使用 bytes.decode(path.numpy() .

  • 下面是完整的代码供您引用。您可以在运行此代码时将其替换为您的图像路径。
    %tensorflow_version 2.x
    import tensorflow as tf
    from keras.preprocessing.image import load_img
    from keras.preprocessing.image import img_to_array, array_to_img
    from matplotlib import pyplot as plt
    import numpy as np

    def load_file_and_process(path):
    image = load_img(bytes.decode(path.numpy()), target_size=(224, 224))
    image = img_to_array(image)
    image = tf.image.central_crop(image, np.random.uniform(0.50, 1.00))
    return image

    train_dataset = tf.data.Dataset.list_files('/content/bird.jpg')
    train_dataset = train_dataset.map(lambda x: tf.py_function(load_file_and_process, [x], [tf.float32]))

    for f in train_dataset:
    for l in f:
    image = np.array(array_to_img(l))
    plt.imshow(image)

    输出 -

    enter image description here

    希望这能回答你的问题。快乐学习。

    关于python - 了解如何使用 tf.dataset.map(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60997186/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com