我正在尝试将时间序列数据建模到具有张量流的卷积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%)。
提前致谢!
答案 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]]]