首页 文章

tensorflow:如何实现这种复杂的掩码操作

提问于
浏览
1

我有一个形状[batch_size,data_size]的张量t1(等级2),如下所示:

|---------------|--------------|--------------|
|      1.0      |     2.0      |     3.0      |
|---------------|--------------|--------------|
|      4.0      |     5.0      |     6.0      |
|---------------|--------------|--------------|
|      7.0      |     8.0      |     9.0      |
|---------------|--------------|--------------|

和形状[batch_size]的指标张量t2(等级1)如下:

|---------------|--------------|--------------|
|      2        |     1        |     3        |
|---------------|--------------|--------------|

我想实现一个函数(t1,t2)来输出:

|---------------|--------------|--------------|
|      1.0      |     2.0      |     0.0      |
|---------------|--------------|--------------|
|      4.0      |     0.0      |     0.0      |
|---------------|--------------|--------------|
|      7.0      |     8.0      |     9.0      |
|---------------|--------------|--------------|

它看起来像是将t1与t2定义的掩码相乘,但我无法弄清楚如何实现它 .

1 回答

  • 1

    我想你在找 tf.sequence_mask . See here . 这基本上实现了创建你想知道的面具 . 用法如下:

    mask = tf.sequence_mask(t2, dtype=tf.float32)
    result = t1 * mask
    

    如果没有给出 dtype ,这将创建一个布尔掩码,当尝试乘以 t1 时可能会导致问题,这就是为什么我们特别要求 float32 .

    如果 t2 中的最大元素可能小于 data_size ,则应使用

    mask = tf.sequence_mask(t2, maxlen=data_size, dtype=tf.float32)
    

    防止 t1mask 之间的形状不匹配 .

相关问题