Тензоры Eager не поддерживают присваивание. Мне нужно выполнить задание.
a = tf.convert_to_tensor(np.random.choice(10, size = 12).reshape(3,4))
b = tf.convert_to_tensor(np.array([2,3]))
a[:,b] *= -1
Traceback (most recent call last):
File "", line 3, in
a[:,b] *= -1
File "/opt/anaconda3/envs/covid_timeseries/lib/python3.7/site-packages/tensorflow_core/python/ops/array_ops.py", line 777, in _slice_helper
_check_index(s)
File "/opt/anaconda3/envs/covid_timeseries/lib/python3.7/site-packages/tensorflow_core/python/ops/array_ops.py", line 666, in _check_index
raise TypeError(_SLICE_TYPE_ERROR + ", got {!r}".format(idx))
TypeError: Only integers, slices (`:`), ellipsis (`...`), tf.newaxis (`None`) and scalar tf.int32/tf.int64 tensors are valid indices, got
Здесь есть предложение по обходному пути:
new = original * mask + other * (1 - mask)
У меня возникли проблемы с этой работой, потому что я не могу найти способ создать маску, которая сама по себе не требует присвоения!
Я был бы очень признателен за некоторые рекомендации, которые помогли бы мне реализовать этот высокоуровневый подход, возможно, что-то вроде этого:
def tf_assign_workaround(tensor, index, newvals):
??
return tensor_with_index_assigned_to_newvals
РЕДАКТИРОВАТЬ: вот исходный, более простой пример
a = tf.convert_to_tensor(np.random.choice(10, size = 12).reshape(3,4))
a[:,1] *= -1
Traceback (most recent call last):
File "", line 2, in
a[:,1] *= -1
TypeError: 'tensorflow.python.framework.ops.EagerTensor' object does not support item assignment