基于张量流中的连续掩码值将张量拆分为动态长度张量?
Tensor split to dynamic length tensors based on continuous mask values in tensorflow?
我正在尝试弄清楚如何根据使用二进制数“1”的值对连续掩码进行分区,将我的顺序数据张量拆分为多个部分。
我已经阅读了官方文档。
但是我找不到任何可以轻松处理这个问题的功能。
python?
中有任何有用的方法吗?
我试过 'tf.ragged.boolean_mask' 但它似乎不适合我的情况。
我解释的形象化例子是:
输入:
# both are tensors, NOT data.
data_tensor = ([3,5,6,2,6,1,3,9,5])
mask_tensor = ([0,1,1,1,0,0,1,1,0])
预期输出:
output_tensor = ([[3],[5,6,2],[6,1],[3,9],[5]])
谢谢。
我最近在@AloneTogether 中发现了一种非常干净的方法:
import tensorflow as tf
data_tensor = tf.constant([3,5,6,2,6,1,3,9,5])
mask_tensor = tf.constant([0,1,1,1,0,0,1,1,0])
# Index where the mask changes.
change_idx = tf.concat([tf.where(mask_tensor[:-1] != mask_tensor[1:])[:, 0], [tf.shape(mask_tensor)[0]-1]], axis=0)
# Ranges of indices to gather.
ragged_idx = tf.ragged.range(tf.concat([[0], change_idx[:-1] + 1], axis=0), change_idx + 1)
# Gather ranges into ragged tensor.
output_tensor = tf.gather(data_tensor, ragged_idx)
print(output_tensor)
<tf.RaggedTensor [[3], [5, 6, 2], [6, 1], [3, 9], [5]]>
我正在尝试弄清楚如何根据使用二进制数“1”的值对连续掩码进行分区,将我的顺序数据张量拆分为多个部分。
我已经阅读了官方文档。 但是我找不到任何可以轻松处理这个问题的功能。 python?
中有任何有用的方法吗?我试过 'tf.ragged.boolean_mask' 但它似乎不适合我的情况。
我解释的形象化例子是:
输入:
# both are tensors, NOT data.
data_tensor = ([3,5,6,2,6,1,3,9,5])
mask_tensor = ([0,1,1,1,0,0,1,1,0])
预期输出:
output_tensor = ([[3],[5,6,2],[6,1],[3,9],[5]])
谢谢。
我最近在@AloneTogether
import tensorflow as tf
data_tensor = tf.constant([3,5,6,2,6,1,3,9,5])
mask_tensor = tf.constant([0,1,1,1,0,0,1,1,0])
# Index where the mask changes.
change_idx = tf.concat([tf.where(mask_tensor[:-1] != mask_tensor[1:])[:, 0], [tf.shape(mask_tensor)[0]-1]], axis=0)
# Ranges of indices to gather.
ragged_idx = tf.ragged.range(tf.concat([[0], change_idx[:-1] + 1], axis=0), change_idx + 1)
# Gather ranges into ragged tensor.
output_tensor = tf.gather(data_tensor, ragged_idx)
print(output_tensor)
<tf.RaggedTensor [[3], [5, 6, 2], [6, 1], [3, 9], [5]]>