将可变长度张量修剪为最大长度

美穗

具有一个固定维度和一个可变长度维度的二维张量:如何将可变长度维度限制为最大长度?如果可变长度较短,则应保留最大值(而不是填充),但如果长度较长,则应将其剪掉。

例如,假设所有张量都具有该形状,(None, 4)并且我希望将所有张量限制为(3, 4). 一个示例输入可以是:

tensor1 = tf.constant([
    [1, 2, 0, 0],
    [1, 3, 4, 0],
    [0, 0, 0, 0],
    [7, 7, 7, 7],
    [7, 8, 9, 1],
], dtype=tf.int32)

...,应该修剪为:

tensor1_trimmed = tf.constant([
    [1, 2, 0, 0],
    [1, 3, 4, 0],
    [0, 0, 0, 0],
], dtype=tf.int32)

但是,任何小于最大值的东西都应该保持不变:

tensor2 = tf.constant([
    [9, 9, 9, 9],
    [9, 9, 9, 9],
], dtype=tf.int32)

...应该保持完全相同:

tensor2_trimmed = tf.constant([
    [9, 9, 9, 9],
    [9, 9, 9, 9],
], dtype=tf.int32)

是否有任何内置命令可以做到这一点?或者你将如何实现这一目标?

尼古拉

tf.strided_slice支持 numpy 样式的切片,因此您可以[:3,:]在示例中使用

>>> tensor1 = tf.constant([
...     [1, 2, 0, 0],
...     [1, 3, 4, 0],
...     [0, 0, 0, 0],
...     [7, 7, 7, 7],
...     [7, 8, 9, 1],
... ], dtype=tf.int32)
>>> tensor1[:3,:]
<tf.Tensor: shape=(3, 4), dtype=int32, numpy=
array([[1, 2, 0, 0],
       [1, 3, 4, 0],
       [0, 0, 0, 0]], dtype=int32)>
>>> tensor2 = tf.constant([
...     [9, 9, 9, 9],
...     [9, 9, 9, 9],
... ], dtype=tf.int32)
>>> tensor2[:3,:]
<tf.Tensor: shape=(2, 4), dtype=int32, numpy=
array([[9, 9, 9, 9],
       [9, 9, 9, 9]], dtype=int32)>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章