首页 > 解决方案 > 拆分数据时在 TensorFlow 中使用 map 函数

问题描述

我正在使用 atf.data.Dataset并且我想对函数中的每个元素进行一些预处理。在这个函数中,我还想创建每个元素的块:

def preprocess(element):
  # Get input and label of element and num_chunks
  ...

  x_batch, y_batch = None, None

  for i in range(num_chunks):
    start = ...
    end = ...
    chunk = input[start: end]
    # Some more preprocessing
    ...
    chunk = tf.expand_dims(chunk, axis=0)
    current_label = tf.expand_dims(label, axis=0)

    x_batch = chunk if x_batch is None else tf.concat([x_batch, chunk], axis=0)
    y_batch = current_label if y_batch is None else tf.concat([y_batch, current_label], axis=0)

  return x_batch, y_batch

之后,我想dataset.map(preprocess)在我的数据集中使用,但我不确定处理预处理函数拆分数据的最佳方法是什么。我可以遍历数据集的每个元素

for element in iter(ds):
    x_batch, y_batch = preprocess(element)
    # Manually concatenate each x_batch
    ...

但这有时意味着内存不足。

如果我直接这样做:

preprocess_ds = ds.map(preprocess, num_parallel_calls=tf.data.AUTOTUNE)

我得到:

"Cannot convert a partially known TensorShape to a Tensor: %s" % s)

ValueError: Cannot convert a partially known TensorShape to a Tensor: (1, None, 129)

标签: pythontensorflow

解决方案


推荐阅读