Python tensorflow和x27的解决方案;s不能在渴望张量中赋值

Python tensorflow和x27的解决方案;s不能在渴望张量中赋值,python,tensorflow,variable-assignment,Python,Tensorflow,Variable Assignment,渴望张量不支持赋值。我需要做作业 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 "<ipython-input-15-516f7e5d5213>", line 3, in <module&g

渴望张量不支持赋值。我需要做作业

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 "<ipython-input-15-516f7e5d5213>", line 3, in <module>
    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 <tf.Tensor: id=3, shape=(2,), dtype=int64, numpy=array([2, 3])>
我很难做到这一点,因为我想不出一种方法来创建一个不涉及任务的面具

我非常感谢能够帮助我实施这一高级方法的一些指导,可能是这样的:

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 "<ipython-input-35-f8973c287624>", line 2, in <module>
    a[:,1] *= -1

TypeError: 'tensorflow.python.framework.ops.EagerTensor' object does not support item assignment
a=tf.convert_to_tensor(np.random.choice(10,size=12)。重塑(3,4))
a[:,1]*=-1
回溯(最近一次呼叫最后一次):
文件“”,第2行,在
a[:,1]*=-1
TypeError:“tensorflow.python.framework.ops.EnguereTensor”对象不支持项分配

我认为您要做的是:

>>将numpy作为np导入
>>>导入tensorflow作为tf
>>>a=tf.convert_to_tensor(np.random.choice(10,size=12)。重塑(3,4))
>>>a
>>>mask=tf.convert_to_tensor(np.one([3,4]).astype(int)*[1,1,0,0])
>>>a=a*遮罩-a*(1-遮罩)
>>>a
请注意,您必须使用相同的类型,因此掩码也必须是
int64

如果要将其设置为通用并更改要屏蔽的列数:

n=3
a=tf.convert_to_tensor(np.random.choice(10,size=12)。重塑(3,4))
mask=tf.convert_to_张量(np.one([3,4]).astype(int)*([1]*(4-n)+[0]*n))
a=a*遮罩-a*(1-遮罩)
最后三列是倒立的符号:



那么您想做什么?否定第二列中的值?上面的例子只是机械地演示我在做什么的一个假人。在我的实际问题中,我有一个张量流模型,我用它来预测一组微分方程的参数,然后我在梯度带中运行微分方程。微分方程的输出需要通过网络的不同输出进行进一步修改。简言之,这真的很复杂@无论如何,你的问题是一个更基本的问题。您正在尝试更改
tf.Tensor
对象的值。您可以通过转换现有的
tf.Tensor
对象来创建一个新的
tf.Tensor
对象,但您不能在位编辑
tf.Tensor
。因此,问题就来了。我需要一个解决办法!如果我连面具都不能分配,我怎么能做面具?!?你问题的答案在很大程度上取决于你想在面具里看到什么。你能举个玩具的例子吗?我可以提供一个例子,其中我否定了第二列。但听起来你的问题过于简单化了。
a = tf.convert_to_tensor(np.random.choice(10, size = 12).reshape(3,4))
a[:,1] *= -1
Traceback (most recent call last):

  File "<ipython-input-35-f8973c287624>", line 2, in <module>
    a[:,1] *= -1

TypeError: 'tensorflow.python.framework.ops.EagerTensor' object does not support item assignment