Window 多维 Tensorflow 数据集
Window Multidimensional Tensorflow Dataset
我有形状为 m
by n
的二维数据,我想 window 沿第一个轴将大小为 w
的数据集放入 m-w
许多二维数组,每个数组的大小为 w
x n
。例如,如果数据是:
[[0, 1, 2 ],
[3, 4, 5 ],
[6, 7, 8 ],
[9, 10, 11]]
那我要window把它改成
[[[0, 1 , 2 ],
[3, 4 , 5 ],
[6, 7 , 8 ]],
[[3, 4 , 5 ],
[6, 7 , 8 ],
[9, 10, 11]]]
我可以window将数据一起放入正确的集合中:
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,但没有骰子。有人知道如何完成吗?
我确实找到了答案 。我不知道为什么会这样,但确实如此:
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)
我有形状为 m
by n
的二维数据,我想 window 沿第一个轴将大小为 w
的数据集放入 m-w
许多二维数组,每个数组的大小为 w
x n
。例如,如果数据是:
[[0, 1, 2 ],
[3, 4, 5 ],
[6, 7, 8 ],
[9, 10, 11]]
那我要window把它改成
[[[0, 1 , 2 ],
[3, 4 , 5 ],
[6, 7 , 8 ]],
[[3, 4 , 5 ],
[6, 7 , 8 ],
[9, 10, 11]]]
我可以window将数据一起放入正确的集合中:
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,但没有骰子。有人知道如何完成吗?
我确实找到了答案
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)