项目分配Tensorflow 2.0-TypeError:'tensorflow.python.framework.ops.EagerTensor'对象不支持项目分配

时间:2019-10-04 18:40:00

标签: python tensorflow

我正在使用Tensorflow 2.0,并试图更新张量中的切片。

像在PyTorch中那样使用普通项目分配,它不起作用。

import tensorflow as tf

tensor = tf.ones((10, 192, 85))
tensor[:, :, 0] = tf.math.sigmoid([:, :, 0])

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

我看到可以使用tf.tensor_scatter_nd_update,但是感觉太冗长而无法高效,因为我必须分别导出要更新的索引。因此,我不确定这是否是在急切的张量中进行项目分配的最佳方法(我需要下面的代码块来实现上面更简单的“ PyTorch 2衬里样式”):

import tensorflow as tf

def get_indices(tensor):
  indices = []
  for i in range(tensor.shape[0]):
    for j in range(tensor.shape[1]):
      indices.append([i, j, 0])
  return tf.convert_to_tensor(indices)

tensor = tf.ones((10, 192, 85))
indices = get_indices(tensor)
updates = tf.reshape(tf.math.sigmoid(tensor[:, :, 0]), (-1,))
tensor = tf.tensor_scatter_nd_update(tensor, indices, updates)

在Tensorflow 2.0中,是否有更简单/更有效的方法来进行EagerTensor的项目分配?

1 个答案:

答案 0 :(得分:0)

您可以这样做:

tensor = tf.ones((10, 192, 85))
tensor = tf.concat([tf.math.sigmoid(tensor[:,:,0:1]), tensor[:,:,1:]], axis=2)