2017-06-14 33 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)。 –