Как порезать каждый тензор в партии по-разному? - PullRequest
0 голосов
/ 25 апреля 2020

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

У меня есть тензор с именем geom формы (:, 128,128,128,1) и тензор с именем координаты формы (:, 3), два тензора имеют одинаковую длину в первом измерении. Однако эта форма неизвестна до времени выполнения, так как из tf.FIFOqueue.dequeue_up_to () возникли тензоры.

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

for each subtensor(of shape 128,128,128,1 ) of geom along dimension 0:
    get corresponding coordinates subtensor of coordinates (of shape  3 )
    crop geom subtensor like this : crop = geom_subtensor[
                              coord_subtensor[0]:coord_subtensor[0]+32,
                              coord_subtensor[1]:coord_subtensor[1]+32,
                              coord_subtensor[2]:coord_subtensor[2]+32]
    store crops in a crops list (for pseudocode explanation purposes)

finally stack crop tensors stored in crops_list , to get a tensor of shape (:,32,32,32,1), with first dimension equal to first dimension of geom

Я надеюсь, что мой псевдокод немного разборчивый. Я попытался заглянуть в tf.scan () https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/scan, чтобы построить этот выходной тензор. Проблема с tf.scan - это функция, которую я должен определить, которая будет применяться для каждого субтенора, fn: принимает два параметра, elems и инициализатор. В моем случае функция должна содержать два тензора, geom и координаты.

Есть ли способ сделать то, что я пытаюсь сделать? Это несколько эффективно, или мне лучше выполнить эту операцию в numpy перед тем, как поместить данные в график тензорного потока? Не могли бы вы предоставить код?

Спасибо, что прочитали мой вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...