2016-11-05 3 views
1

Я хотел бы замаскировать любое другое значение по определенному размеру тензора, но не вижу хорошего способа создания такой маски. НапримерДвоичная маска в Tensorflow

#Masking on the 2nd dimension 
a = [[1,2,3,4,5],[6,7,8,9,0] 
mask = [[1,0,1,0,1],[1,1,1,1,1]] 
b = a * mask #would return [[1,0,3,0,5],[6,0,8,0,0]] 

Есть ли простой способ создания такой маски?

В идеале я хотел бы сделать что-то вроде следующего:

mask = tf.ones_like(input_tensor) 
mask[:,::2] = 0 
mask * input_tensor 

Но кусочек присвоившей, кажется, не так просто, как в Numpy.

ответ

1

Вы можете легко программно создать такую ​​тензорную маску, используя python. Затем преобразуйте его в тензор. В TensorFlow API такой поддержки нет. tf.tile([1,0], num_of_repeats) может быть быстрым способом создания такой маски, но не настолько велика, если у вас есть нечетное количество столбцов.

(Кстати, если вы в конечном итоге создать булеву маску, используйте tf.boolean_mask())

+0

Я могу guaruntee в моем случае, что размер я хочу, чтобы маскировать имеет четное число элементов, так это работает прекрасно. Благодаря! –

+3

Я не думаю, что tf.boolean_mask() сохраняет размеры исходного тензора. Это скорее возвращает не маскируемые элементы в 1-й форме. –

1

В настоящее время Tensorflow does not support Numpy подобных заданий.

Вот несколько обходных путей:

tf.Variable

tf.Tensor не может быть изменен, но tf.Variable может.

a = tf.constant([[1,2,3,4,5],[6,7,8,9,10]]) 

mask = tf.Variable(tf.ones_like(a, dtype=tf.int32)) 
mask = mask[0,1::2] 
mask = tf.assign(mask, tf.zeros_like(mask)) 
# mask = [[1,0,1,0,1],[1,1,1,1,1]] 

tf.InteractiveSession() 
tf.global_variables_initializer().run() 
print(mask.eval()) 

tf.sparse_to_dense()

indices = tf.range(1, 5, 2) 
indices = tf.stack([tf.zeros_like(indices), indices], axis=1) 
# indices = [[0,1],[0,3]] 
mask = tf.sparse_to_dense(indices, a.shape, sparse_values=0, default_value=1) 
# mask = [[1,0,1,0,1],[1,1,1,1,1]] 

tf.InteractiveSession() 
print(mask.eval()) 
+0

Собственно, это не отвечает на вопрос ОП. Они спросили, как вы * генерируете * такую ​​маску программно? – Multihunter

+0

@Multihunter, исправлено. – AlexP

Смежные вопросы