最近我在TensorFlow中阅读了有关未记录的特征的this指南,因为我需要将可变长度序列作为输入传递。但是,我发现tf.train.SequenceExample
的协议相对令人困惑(特别是由于缺少文档),并设法使用tf.train.Example
构建输入管道,而不是很好。
使用tf.train.SequenceExample
有什么好处吗?使用标准示例协议时,如果有一个用于可变长度序列的专用协议似乎是作弊,但它是否会产生任何后果?
答案 0 :(得分:3)
您提供的链接列出了一些好处。您可以在parse_single_sequence_example
查看https://github.com/tensorflow/magenta/blob/master/magenta/common/sequence_example_lib.py的使用方式如果您设法使用Example
将数据导入模型,那么应该没问题。 SequenceExample
只是为您的数据和一些使用它的实用程序提供了更多的结构。
答案 1 :(得分:0)
以下是Example
和SequenceExample
协议缓冲区的定义,以及它们可能包含的所有原型:
message BytesList { repeated bytes value = 1; }
message FloatList { repeated float value = 1 [packed = true]; }
message Int64List { repeated int64 value = 1 [packed = true]; }
message Feature {
oneof kind {
BytesList bytes_list = 1;
FloatList float_list = 2;
Int64List int64_list = 3;
}
};
message Features { map<string, Feature> feature = 1; };
message Example { Features features = 1; };
message FeatureList { repeated Feature feature = 1; };
message FeatureLists { map<string, FeatureList> feature_list = 1; };
message SequenceExample {
Features context = 1;
FeatureLists feature_lists = 2;
};
Example
包含一个Features
,其中包含从功能名称到Feature
的映射,该映射包含一个bytes
列表或一个float
列表或int64
列表。
SequenceExample
还包含一个Features
,但它还包含一个FeatureLists
,其中包含从列表名称到FeatureList
的映射,该映射包含一个{{ 1}}。因此,它可以完成Feature
可以做的所有事情,甚至更多。但是,您真的需要额外的功能吗?它是做什么的?
由于每个Example
都包含一个值列表,因此Feature
是一个列表列表。这就是关键:如果您需要值列表列表,则需要FeatureList
。
例如,如果您处理文本,则可以将其表示为一个大字符串:
SequenceExample
或者您可以将其表示为单词和标记的列表:
from tensorflow.train import BytesList
BytesList(value=[b"This is the first sentence. And here's another."])
或者您可以分别代表每个句子。那是您需要列表列表的地方:
BytesList(value=[b"This", b"is", b"the", b"first", b"sentence", b".", b"And", b"here",
b"'s", b"another", b"."])
然后创建from tensorflow.train import BytesList, Feature, FeatureList
s1 = BytesList(value=[b"This", b"is", b"the", b"first", b"sentence", b"."])
s2 = BytesList(value=[b"And", b"here", b"'s", b"another", b"."])
fl = FeatureList(feature=[Feature(bytes_list=s1), Feature(bytes_list=s2)])
:
SequenceExample
您可以序列化它,甚至可以将其保存到TFRecord文件中。
from tensorflow.train import SequenceExample, FeatureLists
seq = SequenceExample(feature_lists=FeatureLists(feature_list={
"sentences": fl
}))
稍后,当您读取数据时,可以使用data = seq.SerializeToString()
对其进行解析。