2017-06-14 56 views
-2

TensorFlow具有parse_single_sequence_example函数,该函数可用于将SequenceExamples(即顺序数据)提供给RNN。但是,对于我正在处理的问题,除了经常性模型之外,我还想尝试完全卷积模型。我如何以一种能够将数据轻松管道化到卷积模型和经常性模型的方式来存储数据?如何存储数据以用于完全卷积网络以及RNN?

要提供更多信息,我的数据具有以下形状:[number of samples per minibatch, time steps per sample, number of features]number of samples per minibatchnumber of features都是固定的,但time steps per sample可以不同(因此我使用动态RNN)。至少在概念上,应该可以将我的数据重塑为[number of samples per minibatch, time steps per sample, number of features, 1],并将其视为类似于单通道图像(然后可以通过卷积层传递)。然而,我很困惑我将如何解析存储为SequenceExample的数据,以便让我做这种重塑。

回答

0

答案取决于您的功能的形状。例如,如果您具有每个时间步长具有单个浮点值的可变长度特征,例如, (0.1,-4.2,3.0)和(8.2)另一个例子,你可能会考虑把它存储在一个tf中。

然后,您可以使用FixedLenSequenceFeatureparse_example解析,获取软垫张量。继续上面的例子为2的batch_size:

[[0.1, -4.2, 3.0], 
[8.2, 0.0, 0.0]] 

如果你有一个明确的功能,你想嵌入第一,那么你应该使用VarLenFeature获得SparseTensor。如果每个时间步骤只有一个值,则可以使用tf.Example。

如果您有一个值列表,每个时间步骤SequenceExamples是一个更自然的适合。

那么,什么应该指导选择更多的是你的功能有什么形状的问题。 在输入到convolutiondynamic_rnn之前解析之后,您将需要创建具有可变长度序列维度的填充张量。

+0

感谢评论!我更新了我的原始帖子,以澄清我的问题。我没有可变长度的特征,而是可变长度的时间步长。我不相信我可以使用FixedLenSequenceFeature,除非我愿意将我的所有数据零填充,但我不想这样做,因为我的最长序列比我的最短序列多一个数量级。 –

+0

要获得输入到dynamic_rnn或卷积中,您需要一个形状的张量[批次,时间,特征](批次和时间都可以是静态未知的)。此时你别无选择,只能垫。具有parse_example的FixedLenSequenceFeature会为您填充(您可能需要跟踪单独的特征中的序列长度)。但是对于大于1的特征,您可能会发现SequenceExample更直观。要减少填充,请尝试[bucket_by_sequence_length](https://www.tensorflow.org/versions/master/api_docs/python/tf/contrib/training/bucket_by_sequence_length)。 –