Tensorflow 对于可变长度功能,使用tf.train.SequenceExample比使用tf.train.Example有哪些优势?

Tensorflow 对于可变长度功能,使用tf.train.SequenceExample比使用tf.train.Example有哪些优势?,tensorflow,Tensorflow,最近,我阅读了TensorFlow中关于未记录特性的指南,因为我需要将可变长度序列作为输入传递。然而,我发现tf.train.SequenceExample的协议相对混乱(尤其是由于缺乏文档),并设法使用tf.train.Example构建了一个输入管道 使用tf.train.SequenceExample有什么好处吗?当有一个专用于可变长度序列的协议时,使用标准示例协议似乎是一种欺骗,但它会产生任何后果吗?您提供的链接列出了一些好处。你可以看看这里是怎么用的 如果您使用示例成功地将数据输入到模

最近,我阅读了TensorFlow中关于未记录特性的指南,因为我需要将可变长度序列作为输入传递。然而,我发现
tf.train.SequenceExample
的协议相对混乱(尤其是由于缺乏文档),并设法使用
tf.train.Example
构建了一个输入管道


使用
tf.train.SequenceExample
有什么好处吗?当有一个专用于可变长度序列的协议时,使用标准示例协议似乎是一种欺骗,但它会产生任何后果吗?

您提供的链接列出了一些好处。你可以看看这里是怎么用的


如果您使用
示例
成功地将数据输入到模型中,则应该没有问题
SequenceExample
只是为您的数据和一些用于处理数据的实用程序提供了更多的结构。

以下是
示例
SequenceExample
协议缓冲区的定义,以及它们可能包含的所有协议:

消息字节列表{重复字节值=1;}
消息浮动列表{重复的浮动值=1[packed=true];}
消息Int64List{重复的int64值=1[packed=true];}
消息功能{
独一无二的{
字节列表字节数_list=1;
浮动列表浮动列表=2;
Int64List int64_list=3;
}
};
消息特征{map feature=1;};
消息示例{Features=1;};
消息特征列表{重复特征=1;};
消息特征列表{map feature_list=1;};
消息序列示例{
特征上下文=1;
功能列表功能列表=2;
};
示例
包含一个
功能
,其中包含从功能名称到
功能
的映射,该映射包含一个
字节
列表,或一个
浮点
列表或一个
int64
列表

SequenceExample
还包含一个
Features
,但它也包含一个
FeatureList
,它包含从列表名称到
FeatureList
的映射,其中包含一个
Feature
的列表。因此,它可以做
示例
所能做的一切,甚至更多。但是你真的需要这些额外的功能吗?它有什么作用

由于每个
功能
都包含一个值列表,因此
功能列表
就是一个列表列表。这就是关键:如果您需要值列表,那么您需要
SequenceExample

例如,如果处理文本,可以将其表示为一个大字符串:

来自tensorflow.train导入字节列表
BytesList(value=[b“这是第一句话,这是另一句。”)
或者您可以将其表示为单词和标记的列表:

BytesList(值=[b“This”,b“is”,b“the”,b“first”,b“station”,b“,”b“And”,b“here”,
b“s”,b“另一个”,b“.”)
或者你可以分别代表每个句子。这就是您需要列表的地方:

来自tensorflow.train导入字节列表、特征、特征列表
s1=字节列表(值=[b“This”,b“is”,b“the”,b“first”,b“句子”,b”。)
s2=字节列表(值=[b“和”,b“这里”,b“s”,b“另一个”,b”。)
fl=特征列表(特征=[特征(字节列表=s1),特征(字节列表=s2)])
然后创建序列示例:

来自tensorflow.train导入序列示例,功能列表
seq=序列示例(特征列表=特征列表={
“句子”:外语
}))
您可以将其序列化,并可能将其保存到TFRecord文件中

data=seq.SerializeToString()

稍后,当您读取数据时,您可以使用
tf.io.parse\u single\u sequence\u example()

在不久的将来,未记录的特性的实现可能会发生快速变化,其他属性也会发生变化;不建议使用,直到适当的文件。所以最好坚持使用
tf.train.Example