filter_by_instag

paddle.fluid.layers.filter_by_instag(ins, ins_tag, filter_tag, is_lod)[source]

Filter By Instag Layer

This function filter a batch of ins by instag, There are multiple ins, and every ins belongs to some tags. We can specify some tags we want. So the ins which belongs to that tags remains in the output, and others removed.

For example, one batch has 4 ins. Every ins has its tag list.

Ins | Ins_Tag |

|:-----:|:——:| | 0 | 0, 1 | | 1 | 1, 3 | | 2 | 0, 3 | | 3 | 2, 6 |

And Lod is [1,1,1,1]

And the filter tags [1]

From the definition above, ins which has tag 1 can pass the filter So Ins 0 and Ins 1 can pass and be seen in the output, Ins 2 and 3 cannot pass because they do not has tag 1.

Actually, if is_lod is false, it is normal tensor that equals to lod_tensor with all 1, similar to the example above.

Parameters
  • ins (Variable) – Input Variable (LoDTensor), usually it is 2D tensor And first dimension can have lod info or not.

  • ins_tag (Variable) – Input Variable (LoDTensor), usually it is 1D list And split them by lod info

  • filter_tag (Variable) – Input Variable (1D Tensor/List), usually it is list that holds the tags.

  • is_lod (Bool) – Boolean value to indicate ins is lod tensor or not.

Returns

filtered ins (LoDTensor) and loss weight (Tensor)

Return type

Variable

Examples

import paddle.fluid.layers as layers
ins = layers.data(name='Ins', shape=[-1,32], lod_level=0, dtype='float64')
ins_tag = layers.data(name='Ins_tag', shape=[-1,16], lod_level=0, dtype='int64')
filter_tag = layers.data(name='Filter_tag', shape=[-1,16], dtype='int64')
out, loss_weight = layers.filter_by_instag(ins,  ins_tag,  filter_tag, True)