Python 使用tf.data.Dataset()对映射进行矢量化时出错

Python 使用tf.data.Dataset()对映射进行矢量化时出错,python,tensorflow,tensorflow2.0,tensorflow-datasets,tensorflow2.x,Python,Tensorflow,Tensorflow2.0,Tensorflow Datasets,Tensorflow2.x,我有一个通过tf.data.dataset.list\u files()检索的图像数据集 在我的.map()函数中,我读取并解码图像,如下所示: def map_function(filepath): image = tf.io.read_file(filename=filepath) image = tf.image.decode_jpeg(image, channels=3) image = tf.image.convert_image_dtype(image, tf

我有一个通过
tf.data.dataset.list\u files()
检索的图像数据集

在我的
.map()
函数中,我读取并解码图像,如下所示:

def map_function(filepath):
    image = tf.io.read_file(filename=filepath)
    image = tf.image.decode_jpeg(image, channels=3)
    image = tf.image.convert_image_dtype(image, tf.float32)
    image = tf.image.resize(image, [IMAGE_WIDTH, IMAGE_HEIGHT])
    return image
如果我使用(下面的方法有效)

但是,如果我使用(下面会抛出错误):

ValueError:形状必须为秩0,但对于“ReadFile”(op: “ReadFile”)和输入形状:[?]

现在,根据这一点:,代码不应该失败,预处理步骤应该优化(批处理与一次性处理)

我的代码中的错误在哪里


***如果使用
map().batch()

中的示例定义了一个
increment
函数,该函数可以应用于批处理元素和未批处理元素,因为向批处理元素(如[1,2,3])添加1将导致[2,3,4]

def增量(x):
返回x+1
要使用矢量化,您需要编写一个
矢量化的映射函数
,该函数接收未匹配元素的向量,将映射函数应用于向量中的每个元素,然后返回结果的向量

但在您的情况下,我认为矢量化不会产生明显的影响,因为读取和解码文件的成本远远高于调用函数的开销。当map函数非常便宜时,矢量化最有影响,因为调用函数所花费的时间与在map函数中执行实际工作所花费的时间相当

 dataset = tf.data.Dataset.list_files(file_pattern=...)
 dataset = dataset.map(map_function)
 for image in dataset.as_numpy_iterator():
    #Correctly outputs the numpy array, no error is displayed/encountered
    print(image)
  dataset = tf.data.Dataset.list_files(file_pattern=...)
  dataset = dataset.batch(32).map(map_function)
  for image in dataset.as_numpy_iterator():
    #Error is displayed 
      print(image)