【问题标题】:How to apply mask to a tensor and keep its original shape如何将蒙版应用于张量并保持其原始形状
【发布时间】:2019-04-15 20:11:45
【问题描述】:

我有两个张量:一个包含数据,另一个包含布尔值掩码。如果布尔值为 False,我想将数据张量中的所有值设置为零,同时保持数据张量的原始形状。 到目前为止,我只能在 mask 是一个 numpy 数组时实现它。

由于https://www.tensorflow.org/api_docs/python/tf/boolean_mask 影响张量的形状,我不能使用它。

怎么做?

import numpy as np
import tensorflow as tf
tf.enable_eager_execution()

# create dummy data
data_np = np.ones((4,2,3))
mask_np = np.array([[True, True],[False, True],[True, True],[False, False]])

# prepare tensors
data = tf.convert_to_tensor(data_np)
mask = tf.convert_to_tensor(mask_np)

# how to perform the same while avoiding numpy?
mask = np.expand_dims(mask, -1)
data *= mask

【问题讨论】:

  • 您的预期输出又是什么?您希望掩码和数据之间的元素乘法如何执行?

标签: python tensorflow


【解决方案1】:

使用tf.cast()tf.expand_dims()

import tensorflow as tf
import numpy as np

mask_np = np.array([[True, True],[False, True],[True, True],[False, False]])
data_np = np.ones((4,2,3))

mask = tf.convert_to_tensor(mask_np, dtype=tf.bool)
mask = tf.expand_dims(tf.cast(mask, dtype=tf.float32), axis=len(mask.shape))
data = tf.convert_to_tensor(data_np, dtype=tf.float32)

result = mask * data

print(result.numpy())
# [[[1. 1. 1.]
#   [1. 1. 1.]]
# 
#  [[0. 0. 0.]
#   [1. 1. 1.]]
# 
#  [[1. 1. 1.]
#   [1. 1. 1.]]
# 
#  [[0. 0. 0.]
#   [0. 0. 0.]]]

【讨论】:

    猜你喜欢
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    相关资源
    最近更新 更多