Я использую тензор потока 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 перед тем, как поместить данные в график тензорного потока? Не могли бы вы предоставить код?
Спасибо, что прочитали мой вопрос