我正在尝试使用OpenCV通过tensorflow数据集管道编写一个预处理函数。下面的this post在我的情况下不起作用。
为了阐明我的观点,考虑这个虚拟Tensor:
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
获得的A.K. A图像...)
一些伪函数:
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)>
另一方面,直接Map预处理函数保存维数
ds5 = ds2.map(preprocess_images)
ds5
Out[9]: <MapDataset element_spec=TensorSpec(shape=(None, 5, 4, 3), dtype=tf.float64, name=None)>
我错过了什么?
1条答案
按热度按时间bcs8qyzn1#
最后,我发现Mapkeras输入层可以解决这个问题。