Присвоение среза переменной tenorflow

1

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

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

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

  • 0
    Можете ли вы показать код, который создал var1 ? Также, пожалуйста, опубликуйте вывод print(var1); print(type(var1)) .
  • 0
    Добро пожаловать в переполнение стека! Можете ли вы показать нам, как именно определено var1 ? Или хотя бы то, что воспроизводит точно такую же ошибку? Создав надлежащий минимальный воспроизводимый пример , будет гораздо легче ответить на этот вопрос.
Показать ещё 2 комментария
Теги:
tensorflow
variables
slice
assign

2 ответа

0

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

v = tf.Variable(...)
with tf.control_dependencies([v[...].assign(...)]):
  return v[...].assign(...)
0

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

Нотация нотации с tf.slice(tensor, a, a+b) numpy (tensor[a:b]) является просто сокращением длинной нотации tf.slice(tensor, a, 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.

  • 0
    Попробуйте tf.Variable([1., 2])[0:1].assign(tf.ones((1,))) . Более вероятно, что var1 был нарезан раньше и что показанная операция является последующей нарезкой.
  • 0
    Спасибо за разъяснение. Очень признателен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню