Tensorflow 如何存储在完全卷积网络和RNN中使用的数据?

Tensorflow 如何存储在完全卷积网络和RNN中使用的数据?,tensorflow,recurrent-neural-network,Tensorflow,Recurrent Neural Network,TensorFlow有一个函数,用于将序列示例(即序列数据)输入RNN。然而,对于我正在研究的问题,除了递归模型之外,我想尝试完全卷积模型。我如何以一种方式存储我的数据,使数据能够轻松地通过管道传输到卷积模型和循环模型中 为了提供更多信息,我的数据具有以下形状:[每个小批量的样本数、每个样本的时间步长、功能数]。每个小批量的样本数和功能数都是固定的,但每个样本的时间步长可能会有所不同(因此我使用动态RNN)。至少在概念上,可以将我的数据重塑为[每个小批量的样本数、每个样本的时间步数、特征数,1]

TensorFlow有一个函数,用于将序列示例(即序列数据)输入RNN。然而,对于我正在研究的问题,除了递归模型之外,我想尝试完全卷积模型。我如何以一种方式存储我的数据,使数据能够轻松地通过管道传输到卷积模型和循环模型中


为了提供更多信息,我的数据具有以下形状:
[每个小批量的样本数、每个样本的时间步长、功能数]
。每个小批量的
样本数
功能数
都是固定的,但每个样本的
时间步长
可能会有所不同(因此我使用动态RNN)。至少在概念上,可以将我的数据重塑为
[每个小批量的样本数、每个样本的时间步数、特征数,1]
,并将其视为类似于单通道图像(然后可以通过卷积层)。但是,我对如何解析存储为SequenceExample的数据感到困惑,因为这样做可以让我进行重塑。

答案有点取决于您的功能的形状

例如,如果你有一个可变长度的特征,每一个时间步有一个浮动值,例如(0.1,4.2,3)一个例子,(8.2)另一个例子,你可以考虑把它存储在TF中。 然后可以使用for解析来获得填充张量。继续上面的示例,批量大小为2:

[[0.1, -4.2, 3.0], 
 [8.2,  0.0, 0.0]]
如果你想先嵌入一个分类特征,那么你应该使用VarLenFeature来获得一个SparseTensor。如果每个时间步长只有一个值,则可以将其与tf.Example一起使用

如果每个时间步都有一个值列表,则示例更适合

因此,引导选择的更多是你的特征有什么形状的问题。
在输入到or之前进行解析后,您需要创建一个具有可变长度序列维度的填充张量。

谢谢您的评论!我更新了我原来的帖子来澄清我的问题。我没有可变长度的特性,而是可变长度的时间步长。我不相信我可以使用FixedLenSequenceFeature,除非我愿意对所有数据进行零填充,我不想这样做,因为我的最长序列比最短序列多一个数量级。要将输入输入到动态或卷积中,你需要一个形状张量[批次、时间、特征](批处理和时间都可以是静态未知的)。此时,您别无选择,只能填充。带有parse_示例的FixedLenSequenceFeature将为您填充(您可能希望在单独的功能中跟踪序列长度).但当功能数>1时,您可能会发现SequenceExample更易于使用。要减少填充,请尝试。