【问题标题】:tensorflow: how to implement this complex mask operationtensorflow:如何实现这个复杂的掩码操作
【发布时间】:2018-07-25 18:38:21
【问题描述】:

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

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

还有一个形状为 [batch_size] 的指标张量 t2(rank 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 定义的掩码相乘,但我不知道如何实现。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    我认为您正在寻找tf.sequence_maskSee 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 之间的形状不匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-28
      • 1970-01-01
      • 2019-02-15
      • 2018-12-03
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      相关资源
      最近更新 更多