Python 如何在TFR记录中保存不同长度的列表列表?

Python 如何在TFR记录中保存不同长度的列表列表?,python,tensorflow,machine-learning,deep-learning,nlp,Python,Tensorflow,Machine Learning,Deep Learning,Nlp,我有一个由嵌套序列组成的数据集,例如,一个数据点如下所示: p1 = [[1,1,1], [2,2], [3,3,3]] 但另一个数据点可能如下所示: p2 = [[1,1], [2,2,2,2,2]] 我不知道如何在TFRecords中保存列表列表,因为我找到的所有示例都只保存长度不同的非嵌套列表。然后我计划使用padded_batch创建形状的三维张量 [批量大小、列表的最大数量、列表中令牌的最大数量]一个选项是按顺序存储每个值。例如,您的第一个示例将存储为[1,1,1,2,2,3,3]

我有一个由嵌套序列组成的数据集,例如,一个数据点如下所示:

p1 = [[1,1,1], [2,2], [3,3,3]]
但另一个数据点可能如下所示:

p2 = [[1,1], [2,2,2,2,2]]
我不知道如何在TFRecords中保存列表列表,因为我找到的所有示例都只保存长度不同的非嵌套列表。然后我计划使用padded_batch创建形状的三维张量
[批量大小、列表的最大数量、列表中令牌的最大数量]

一个选项是按顺序存储每个值。例如,您的第一个示例将存储为
[1,1,1,2,2,3,3]
。要复制原始序列,还可以存储原始长度-
[3,2,3]
,然后在预处理中重建。我建议从一开始就填充嵌套序列,这样您就可以通过简单的重塑操作进入/从展开/嵌套。

现在回答有点晚,尽管我认为对于需要它的人来说,有一种比@Cory Nezin建议的展平序列更自然的方法

  • 在您的特定情况下,我认为您可能需要使用
    RaggedTensors
    ,该传感器可以在TFRecords中本机写入并读取。在像您这样的情况下,如果您有一个2D RaggedSensor,您需要存储张量值,只要有行拆分(例如),然后像这样读取(您会找到更多信息):
  • tf.io.RaggedFeature(value\u key=“value\u serialization”,dtype=tf.int64,分区=[
    tf.io.RaggedFeature.RowSplits(“row_split_serialization”)])
    
  • 如果你只有可能变化的序列数量,但内部向量是固定维的(这里不是你的例子,但值得一提)。您可能希望将其用作在
    TFRecord
    中写入和解码的原型。虽然由于缺乏文档,要解决这个问题有点困难,但您可能会发现它很有用