【问题标题】:How to reduce (m, 50) tensor to (m, 25) tensor based on tensor value in tensorflow 1.10如何根据tensorflow 1.10中的张量值将(m,50)张量减少为(m,25)张量
【发布时间】:2021-10-27 12:57:24
【问题描述】:

例如,

# (m, 50) tensor a
print(a)

<tf.Tensor: id=11543, shape=(3, 50), dtype=int32, numpy=
array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 32, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1,
        1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1, 11, 1, 1, 1, 11, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1,
        1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1, 421, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1,
        1, 1, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0]], dtype=int32)>

# (m, 50) tensor b
print(b)
<tf.Tensor: id=20624, shape=(3, 50), dtype=int32, numpy=
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        1, 1, 1, 1, 1, 1],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        1, 1, 1, 1, 1, 1],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 1, 11, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        1, 1, 1, 1, 142, 1]], dtype=int32)

张量形状是(m, 50),其中一半全为0,所以我想将张量减少为(m, 25),它会丢弃所有0的一半。
我想知道如何在tf 1.10 中实现它。

【问题讨论】:

    标签: python tensorflow tensor


    【解决方案1】:

    我假设已知每行中的零数正好代表列大小的一半。如果没有,那么删除零将导致不规则的张量(具有不同维度大小的张量),tf v1.10.0 不支持。

    您可以创建一个遮罩,其中张量中的元素大于 0,然后使用 tf.boolean_mask 将它们遮盖掉(而且我们将不得不重塑结果,因为 tensorflow 1.10 无法推断出新形状)。

    import tensorflow as tf
    
    
    # using the `a` defined in your question
    mask = tf.cast(a > 0, dtype=tf.int32)
    result = tf.boolean_mask(a, mask)
    result = tf.reshape(result, (3, 25))
    
    
    with tf.Session() as sess:
        print(result.eval())
    
    # [[  1   1   1   1   1   1   1   1   1   1  15  32   1   1   7   1   1   1
    #     1   1   1   1   1   1   1]
    #  [  1   1   1   1   1  11   1   1   1  11   1   1   1   1   1   8   1   1
    #     1   1   1   1   1   1   1]
    #  [  1   1   1   1   1 421   1   1   1   1   1   1   1   1   1  12   1   1
    #     1   1   1   1   1   1  42]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      相关资源
      最近更新 更多