【发布时间】: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