使用 tf.data 时如何对数据进行自定义预处理?

Posted

技术标签:

【中文标题】使用 tf.data 时如何对数据进行自定义预处理?【英文标题】:how to do custom pre-processing on data when using tf.data? 【发布时间】:2021-01-01 21:12:03 【问题描述】:

我需要一些关于 tf.data 的帮助。

我正在对 SQUAD 数据集进行一些实验。给出的数据集结构如下:

row-1]   conext: "some big string", question:"q string", "answer": "some ans" 

我想利用 tf.data 进行加载和预处理。加载后,它被加载。格式:


  context: Tensor("some big string"), 
  question:Tensor(q string),
  answer": Tensor(some ans) 

现在我们要对数据进行预处理。现在这里的预处理并不简单,因为值是张量对象。

Tensorflow 为此类预处理提供了一些 api,但是 如果我想进行自定义预处理,或者我想使用 spacy,它只对字符串等原始数据类型而不是张量进行操作。强>

基本上我需要关于这个 sn-p 的帮助:

def format_data(row):
  # Now I can access individual data row here. But value of row is in Tensor form.

  # Hence I can't use my custom function. How to use custom function or spacy function which operates on string and not on tensor?

  # I can use only below tf functions
  return tf.strings.regex_replace(row['context'],'some-regex',' ',True)


train = dataset.map(format_data).batch(2)
ist(train.take(1))

【问题讨论】:

#我也试过用tf.py_function,不行。 【参考方案1】:

以下代码有效:

def parse_str(str_tensor):
    raw_string = str_tensor.numpy().decode("utf-8") 

    # play with raw string
    raw_string = 'AAA'+raw_string     
    return raw_string

调用解析函数:

def tf_pre_processing(row):
  return tf.py_function(parse_str, [row['context']], [tf.string])


train = t.map(tf_pre_processing).batch(1).take(1)

list(train)

【讨论】:

以上是关于使用 tf.data 时如何对数据进行自定义预处理?的主要内容,如果未能解决你的问题,请参考以下文章

获取 InvalidArgumentError:NewRandomAccessFile 在自定义图像数据集上使用 tf.data 时无法创建/打开

如何通过 tf.data API 使用 Keras 生成器

tensorflow-读写数据tf.data

如何使用提供的需要 tf.Tensor 的 preprocess_input 函数预处理 tf.data.Dataset?

如何在 tensorflow tf.data.Dataset 中使用 cv2 图像增强功能?

如何在 TensorFlow 中对数据集进行切片?