时间序列输入用于具有张量流的1D卷积

时间:2017-11-16 16:53:13

标签: python tensorflow

我正在尝试将时间序列数据建模到具有张量流的卷积NN。 我的时间序列数据格式如下

[timestamp, x, y, z]

我想为三个通道(x,y,z)创建300个时间戳窗口。因此我已按如下方式预处理数据,当我将其输入tf.layers.conv1d时,我使用以下重新输入的输入

[1]
[x,y,z],[x,y,z],...[x,y,z] of size 3*300
#input shape is [-1, 3*300]
input = tf.reshape(input, shape = [-1, 300, 3])
#input shape is [-1, 300, 3]

[2]
[x,x,..x],[y,y,..y],[z,z...z] of size 300*3
#input shape is [-1, 300*3]
input = tf.reshape(input, shape = [-1, 300, 3])
#input shape is [-1, 300, 3]

考虑到我的原始数据集,这个版本中的哪一个是正确的重塑? 或者他们俩都不对?在这种情况下,将这些数据输入卷积层的正确方法是什么?

我已经尝试了两者,准确度结果非常低(低于40%)。

提前致谢!

1 个答案:

答案 0 :(得分:1)

方法2 是正确的。您可以通过运行以下简单示例代码来验证它。在这里,我的bacth_size = 2而不是300我只使用了9。

#Method1
input1 = np.array([[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
                   [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]])
print(input1.shape)  # prints (2, 3*9)
out1 = tf.reshape(input1, shape=[-1, 9, 3])

#Method2
input2 = np.array([[1, 1, 1, 2, 2, 2, 3, 3, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3],
                   [1, 1, 1, 2, 2, 2, 3, 3, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3]])
print(input2.shape)  # prints (2, 3*9)
out2 = tf.reshape(input2, shape=[-1, 9, 3])

sess = tf.Session()
with sess.as_default():
    print(out1.eval())  # runs out1
    print(out2.eval())  # runs out2

因此,输入(batch_size = 2,width = 9,num_channels = 3) tf.layers.conv1d 应具有以下形状。

[[[x y z]
  [x y z]
  [x y z]
  [x y z]
  [x y z]
  [x y z]
  [x y z]
  [x y z]
  [x y z]]

 [[x y z]
  [x y z]
  [x y z]
  [x y z]
  [x y z]
  [x y z]
  [x y z]
  [x y z]
  [x y z]]]