【问题标题】:Window Multidimensional Tensorflow Dataset窗口多维张量流数据集
【发布时间】:2020-07-04 21:28:43
【问题描述】:

我有形状为mn 的二维数据,我想沿第一轴将大小为w 的窗口放入m-w 的数据集中,每个数组的大小为w通过n。例如,如果数据是:

[[0,  1,  2 ], 
 [3,  4,  5 ], 
 [6,  7,  8 ],
 [9,  10, 11]]

然后我想把它窗口化

[[[0, 1 , 2 ], 
  [3, 4 , 5 ], 
  [6, 7 , 8 ]],
 [[3, 4 , 5 ],
  [6, 7 , 8 ],
  [9, 10, 11]]]

我可以将数据一起窗口化到正确的集合中:

dataset = tf.data.Dataset.from_tensor_slices(np.arange(5*3).reshape(5,3))
dataset = dataset.window(size=3,shift=1,drop_remainder=True)
for window in dataset : print(list(window.as_numpy_iterator()))
>>>[array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]
>>>[array([3, 4, 5]), array([6, 7, 8]), array([ 9, 10, 11])]
>>>[array([6, 7, 8]), array([ 9, 10, 11]), array([12, 13, 14])]

但我不知道如何将数据重新恢复为堆叠形状。我想也许是 tf.stack,但没有骰子。有人知道如何完成这个吗?

【问题讨论】:

    标签: python tensorflow tensorflow2.0 tensorflow-datasets


    【解决方案1】:

    我实际上找到了答案here。我不知道它为什么有效,但确实有效:

    dataset = tf.data.Dataset.from_tensor_slices(np.arange(5*3).reshape(5,3))
    dataset = dataset.window(size=3,shift=1)
    dataset = dataset.flat_map(lambda x : x.batch(3))
    for d in dataset : print(d)
    

    这让

    
    tf.Tensor(
    [[0 1 2]
     [3 4 5]
     [6 7 8]], shape=(3, 3), dtype=int64)
    tf.Tensor(
    [[ 3  4  5]
     [ 6  7  8]
     [ 9 10 11]], shape=(3, 3), dtype=int64)
    tf.Tensor(
    [[ 6  7  8]
     [ 9 10 11]
     [12 13 14]], shape=(3, 3), dtype=int64)
    tf.Tensor(
    [[ 9 10 11]
     [12 13 14]], shape=(2, 3), dtype=int64)
    tf.Tensor([[12 13 14]], shape=(1, 3), dtype=int64)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多