簡體   English   中英

項目分配 Tensorflow 2.0 - TypeError: 'tensorflow.python.framework.ops.EagerTensor' object 不支持項目分配

[英]Item Assignment Tensorflow 2.0 - TypeError: 'tensorflow.python.framework.ops.EagerTensor' object does not support item assignment

我正在使用 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-liner style”):

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的項目分配?

你可以這樣做:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM