【问题标题】:Trim variable-length tensor to a maximum length将可变长度张量修剪到最大长度
【发布时间】:2020-06-06 16:20:54
【问题描述】:

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

例如,假设所有张量的形状都为(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)

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

【问题讨论】:

    标签: python tensorflow tensorflow2.x


    【解决方案1】:

    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)>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 2010-12-21
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多