как манипулировать тензорным массивом, объект 'Tensor' не поддерживает назначение элементов - PullRequest
1 голос
/ 01 мая 2020

Мне нужно манипулировать тензором, как показано ниже

ary = np.array([82.20674918566776, 147.55325947521865, 25.804872964169384, 85.34690767735665, 1, 0]).reshape(1,1,1,1,6)

tf_array = tf.convert_to_tensor(ary, tf.float32)
value_x = 13.0
norm_value = 416.0

tf_array[...,0:4] = tf_array[...,0:4] * (value_x / norm_value)

при выполнении

TypeError: объект 'Tensor' не поддерживает назначение элементов

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Вы не можете присваивать значения в TensorFlow, так как тензоры неизменны (переменные TensorFlow могут менять свое значение, но это больше похоже на замену их внутреннего тензора на новый). Ближайшая вещь к назначению элемента в TensorFlow может быть tf.tensor_scatter_nd_update, которая все еще не присваивает новое значение, но создает новый тензор с заменой некоторых значений. В общем, вы должны найти способ вычислить результат, который вы хотите получить от имеющегося тензора. В вашем случае вы можете сделать, например, это:

import tensorflow as tf
import numpy as np

ary = np.array([82.20674918566776, 147.55325947521865,
                25.804872964169384, 85.34690767735665,
                1, 0]).reshape(1,1,1,1,6)
tf_array = tf.convert_to_tensor(ary, tf.float32)
value_x = 13.0
norm_value = 416.0

# Mask for the first four elements in the last dimension
m = tf.range(tf.shape(tf_array)[0]) < 4
# Pick the multiplication factor where the mask is true and 1 everywhere else
f = tf.where(m, value_x / norm_value, 1)
# Multiply the tensor
tf_array_multiplied = tf_array * f
# [[[[[2.568961   4.611039   0.80640227 2.667091   0.03125    0.        ]]]]]
0 голосов
/ 04 мая 2020

Спасибо,

Я попытался обойти

ary = np.array([82.20674918566776, 147.55325947521865, 25.804872964169384, 85.34690767735665, 1, 0]).reshape(1,1,1,1,6)

tf_array = tf.convert_to_tensor(ary, tf.float32)
value_x = 13.0
norm_value = 416.0

#create array of same shape and values to be multiplied with
temp = np.array([value_x /norm_value , value_x /norm_value, value_x /norm_value, value_x /norm_value, 1, 1]).reshape(1,1,1,1,6)

#convert numpy array to tensorflow tensor
normalise_ary = tf.convert_to_tensor(temp, tf.float32)

tf_array = tf_array * normalise_ary
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...