如何在 Tensorflow 2 中测量右填充张量的(内容)长度?

How to measure (content) length of right padded Tensor in Tensorflow 2?

我有一些不同长度的序列(例如编码成数字数据的文本数据)。为了将它们放入张量中,使用零将它们右填充到固定宽度。例如:

import tensorflow as tf
x = tf.constant([[12, 31,  7,  5,  0,  0],
                 [ 1,  1,  0,  0,  0,  0],
                 [ 44, 9, 11, 21, 20, 22],
                 [  0, 0,  0,  0,  0,  0]])

现在我的问题是:如何测量这些填充序列的(内容)长度?

我期望从上面的示例中得到的输出是:

x_len = tf.constant([4, 2, 6, 0])

一个解决方案是计算零的数量并从张量的宽度中减去它,但是 Tensorflow 已经有一个无论如何计算非零值的函数:tf.math.count_nonzero.

因此,解决方案就像下面的一行一样简单:

x_len = tf.math.count_nonzero(x, axis=1)