【问题标题】:py_function mapping return unknown shape of batched tensorflow datasetpy_function 映射返回批处理张量流数据集的未知形状
【发布时间】:2022-08-17 10:03:20
【问题描述】:

我正在尝试通过 tensorflow 数据集管道使用 OpenCV 编写预处理函数。关注this post 在我的情况下不起作用。

为了明确我的观点,考虑这个虚拟张量:

import tensorflow as tf
import numpy as np
ds1 = tf.random.uniform(
    (6,5,4,3),
    minval=0,
    maxval=None,
    dtype=tf.dtypes.float64,
    seed=None,
    name=None
)
ds2 = tf.data.Dataset.from_tensor_slices(ds1).batch(batch_size=2)
ds2
Out[4]: <BatchDataset element_spec=TensorSpec(shape=(None, 5, 4, 3), dtype=tf.float64, name=None)>

接下来,我的目标是对这些“数组”应用预处理步骤(也就是在实践中使用tf.keras.preprocessing.image_dataset_from_directory 获得的图像......)

一些虚拟功能:

def preprocess_images(x):
    return x+1

def parse_func_decorator(x):
    return tf.py_function(preprocess_images, [x], tf.float64)

现在开始我想了解的谜团:通过 py_function 应用预处理函数会给出未知的形状:

ds3 = ds2.map(parse_func_decorator)
ds3
Out[7]: <MapDataset element_spec=TensorSpec(shape=<unknown>, dtype=tf.float64, name=None)>

另一方面,直接映射预处理函数,保存维度

ds5 = ds2.map(preprocess_images)
ds5
Out[9]: <MapDataset element_spec=TensorSpec(shape=(None, 5, 4, 3), dtype=tf.float64, name=None)>

我错过了什么?

  • 当你调用py_function时,为什么你在x[x]中使用括号?

标签: tensorflow tensorflow-datasets


【解决方案1】:

最后,我发现使用 keras 输入层可以解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    相关资源
    最近更新 更多