Присвоение среза переменной tenorflow - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь присвоить значения срезу переменной в тензорном потоке, но отображается следующая ошибка: «ValueError: Назначение нарезки поддерживается только для переменных».Почему эта ошибка отображается, хотя я пытаюсь выполнить назначение фрагмента переменной.Мой код выглядит примерно так:

var1 = var1[startx:endx,starty:endy].assign(tf.ones([endx-startx,endy-starty],dtype=tf.int32))

, где var1 - переменная тензорного потока.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Другой ответ правильный;выполнение любой операции с переменной tf (всегда) не возвращает переменную tf.Поэтому, если вы создаете цепочку назначений, используйте явные управляющие зависимости:

v = tf.Variable(...)
with tf.control_dependencies([v[...].assign(...)]):
  return v[...].assign(...)
0 голосов
/ 16 октября 2018

Как только var1 нарезан, он больше не является переменной.

Обрезная нотация (tensor[a:b]) - это просто сокращение для более длинной нотации тензорного потока tf.slice(tensor, a, a+b), которая выводит новую тензорную операцию на графике (см. https://www.tensorflow.org/api_docs/python/tf/slice).

График, который вы пытаетесь сделать, выглядит следующим образом (с тензорными типами вывода, указанными в скобках):

Var1 (tf.Variable) -> tf.slice (tf.Tensor) тензор -> tf.assign (tf.Variable).

Поскольку назначение работает только на tf.Variable объектах, оно не может работать на выходе среза op.

...