Arrays tensorflow创建不同长度的遮罩
在tensorflow中有一个长度张量,假设它是这样的:Arrays tensorflow创建不同长度的遮罩,arrays,masking,tensorflow,Arrays,Masking,Tensorflow,在tensorflow中有一个长度张量,假设它是这样的: [4, 3, 5, 2] 我希望创建一个包含1和0的掩码,其1的数量对应于这个张量的条目,由0填充,总长度为8。也就是说,我想创建这个张量: [[1,1,1,1,0,0,0,0], [1,1,1,0,0,0,0,0], [1,1,1,1,1,0,0,0], [1,1,0,0,0,0,0,0] ] 我可以如何做到这一点?这可以通过以下多种方式实现: 我得到的版本比之前的答案要短一点。不确定它是否更有效 def mask(self
[4, 3, 5, 2]
我希望创建一个包含1和0的掩码,其1的数量对应于这个张量的条目,由0填充,总长度为8。也就是说,我想创建这个张量:
[[1,1,1,1,0,0,0,0],
[1,1,1,0,0,0,0,0],
[1,1,1,1,1,0,0,0],
[1,1,0,0,0,0,0,0]
]
我可以如何做到这一点?这可以通过以下多种方式实现:
我得到的版本比之前的答案要短一点。不确定它是否更有效
def mask(self, seq_length, max_seq_length):
return tf.map_fn(
lambda x: tf.pad(tf.ones([x], dtype=tf.int32), [[0, max_seq_length - x]]),
seq_length)
这可以通过
tf.sequence\u mask
实现。更多详细信息。不错,但是将mask
的布尔值强制转换为int或者直接使用它们而不是使用tf不是更有效吗?在最后一行选择?当然!我想我过去在C编程方面的经验意味着我从未期望bool的int-casting工作:),但我相信这在TensorFlow中有很好的定义。还有tf.zeros_like(mask)
,它将创建一个零初始化的张量形状的张量mask
。你需要平铺吗?tf.less
会自动为你播放吗?显然你不会。谢谢你的建议!
def mask(self, seq_length, max_seq_length):
return tf.map_fn(
lambda x: tf.pad(tf.ones([x], dtype=tf.int32), [[0, max_seq_length - x]]),
seq_length)