Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

tensorflow creating mask of varied lengths

I have a tensor of lengths in tensorflow, let's say it looks like this:

[4, 3, 5, 2]

I wish to create a mask of 1s and 0s whose number of 1s correspond to the entries to this tensor, padded by 0s to a total length of 8. I.e. I want to create this tensor:

[[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]
]

How might I do this?

like image 333
Evan Pu Avatar asked Dec 07 '15 07:12

Evan Pu


2 Answers

This can now be achieved by tf.sequence_mask. More details here.

like image 162
Sonal Gupta Avatar answered Nov 11 '22 22:11

Sonal Gupta


This can be achieved using a variety of TensorFlow transformations:

# Make a 4 x 8 matrix where each row contains the length repeated 8 times.
lengths = [4, 3, 5, 2]
lengths_transposed = tf.expand_dims(lengths, 1)

# Make a 4 x 8 matrix where each row contains [0, 1, ..., 7]
range = tf.range(0, 8, 1)
range_row = tf.expand_dims(range, 0)

# Use the logical operations to create a mask
mask = tf.less(range_row, lengths_transposed)

# Use the select operation to select between 1 or 0 for each value.
result = tf.select(mask, tf.ones([4, 8]), tf.zeros([4, 8]))
like image 15
mrry Avatar answered Nov 12 '22 00:11

mrry