数据集直接来自tf.train.SequenceExample

时间:2018-05-10 07:40:36

标签: python tensorflow sequences tensorflow-datasets

我正在NER中使用tensorflow之类的序列标记,并决定尝试使用tf.data来查看是否可以使用我的模型改进IO性能。

目前我正在使用TFRecordWriter预处理并保存我的训练/验证数据,这是tf.train.SequenceExample()序列化为字符串。然后我用tf.data.TFRecordDataset加载它,解析/ shuffle / padded_batch然后继续训练,这很好。

问题

  • 是否有一种方便的方法可以在没有dataset的情况下制作serializing并将SeuquenceExamples保存到tfrecord文件?
  • 当我对新数据进行预测时,这似乎是一个不必要的步骤。我曾尝试使用tf.data.Dataset.from_tensor_slices(),但在这种情况下似乎不适合,因为输入是不填充的不同长度的序列。

1 个答案:

答案 0 :(得分:2)

在这种情况下可以使用tf.data.Dataset.from_generator()。例如,让我们说您的示例看起来像以下非常简单的数据,有两个功能(其中第二个代表顺序数据):

examples = [("foo", [1, 2, 3, 4, 5]),
            ("bar", [6, 7]),
            ("baz", [8, 9, 10])]

您可以使用以下代码将其转换为tf.data.Dataset

def example_generator():
  for string_feature, sequence_feature in examples:
    yield string_feature, sequence_feature

dataset = tf.data.Dataset.from_generator(
    example_generator,
    output_types=(tf.string, tf.int32),
    output_shapes=([], [None]),  # A scalar and a variable-length vector.  
)