Эквивалент Tensorflow 1.x для индексации массива numpy - PullRequest
0 голосов
/ 18 июня 2020

Я реализовал logi c с использованием python / numpy, который выглядит следующим образом:

У меня есть тензор (из нулей и единиц), и мне нужно создать маску для этого тензора на основе минимальное пороговое значение последовательных вхождений 1 . Предположим, что если у нас есть пороговое значение, равное 3, то части тензора, имеющие 3 или более последовательных вхождений 1 , должны быть замаскированы до нуля или иначе 1. Для вышеуказанного тензора, если у нас есть пороговое значение как 3, тогда мы должен получить

tensor = [1, 1, 1, 1, 0, 0, 1, 1, 0, 1] 
mask   = [0, 0, 0, 0, 1, 1, 1, 1, 1, 1]

Первый патч единиц в тензоре имеет более 3 вхождений (замаскирован до 0), тогда как второй патч единиц имеет только 2 случая (замаскирован до 1). Нули в тензоре всегда маскируются до 1.

Моя реализация (с использованием нетерпеливого выполнения):

seq_length = tf.constant(10)                           #length of tensor given
tensor = tf.constant([1, 1, 1, 1, 0, 0, 1, 1, 0, 1])
v = 3 (integer as threshold value)
mask = np.ones(seq_length.numpy())
update_mask = np.zeros(v)

for start in range(seq_length.numpy()):  (We iterate a sliding window of v elements over the tensor and check the condition at every iteration) 
    end = start + v - 1      #sliding window (start, end)
    if end >= seq_length.numpy():
        break
    if tf.reduce_sum(tensor[start : end + 1, t]).numpy() == v:    
        mask[start : end + 1, t] = update_mask

return mask

Я хочу реализовать этот logi c в коде TF 1.x внутри сеанс (без активного выполнения) с использованием только tf-операций tf.while_loop, tf.cond, tf.scatter_update etc для включения этих операций в tf-график.

Но поскольку назначение срезов не работает с тензорами, я не могу понять, как реализовать это logi c в сеансе tf.

Любая помощь будет оценена.

...