Tensorflow создает новый тензор из индексов

#python #tensorflow

#python #tensorflow

Вопрос:

Я пытаюсь объединить тензоры следующим образом:

 a = [0, 0, 1, 1, 1, 2]
b = [[1, 2], [3, 4], 
     [5, 6], [7, 8], [9, 10], 
     [11, 12]]
  

вывод:

 c = [[[1, 2], [3, 4]], 
     [[5, 6], [7, 8] ,[9, 10]], 
     [[11, 12]]]
  

Таким образом, по сути, a — это индексы тензора b во втором измерении.

Формы следующие:

 a = (?,) #(6) in this example
b = (?, 2) #(6, 2) in this example
c = (?, ?, 2) #(batch_size aka 3, varies, maybe I need a ragged tensor, 2)
  

Более подробное объяснение:
Я пытаюсь отфильтровать тензор, сохраняя исходный размер пакета. Когда я запускаю следующее, приведенное выше является упрощенным выводом:

 pos = tf.where(box_class_scores >= confidence)
g_boxes =  tf.gather_nd(boxes, pos) # this is b
indicies = tf.cast(pos[:, 0], tf.float32) #this is a
  

Мне нужно сделать выше, чтобы сохранить размер пакета для модели. Я использую Tensorflow 1.14 (это требование)

Любая помощь приветствуется.

Ответ №1:

Ответ — это конструктор неровного тензора для всех, кто ищет это:

 tf.RaggedTensor.from_value_rowids(
    values=b,
    value_rowids=a)