0

TensorFlow Python: Доступ к отдельным элементам в тензоре

12

Я столкнулся с проблемой при доступе к отдельным элементам в тензоре, например, в тензоре [[1,2,3]]. Мне нужно получить доступ к внутреннему элементу [1,2,3]. Это можно сделать с помощью метода .eval() или через sess.run(), но при больших размерах тензора процесс занимает много времени.

Существует ли способ ускорить этот процесс?

3 ответ(ов)

0

Я надеюсь, я правильно понял ваш вопрос. Вы можете получить доступ к элементам тензора в TensorFlow 2, используя метод .numpy().

import tensorflow as tf
t = tf.constant([[1, 2, 3]])

print(t.numpy()[0][1])  # Это выведет 2

>>> 2
0

Я подозреваю, что основное время выполнения занимает остальная часть вычислений, а не доступ к одному элементу.

Кроме того, результат может потребовать копирования из памяти, в которой он хранится. Например, если данные находятся на графическом процессоре, их нужно сначала скопировать в оперативную память, прежде чем вы сможете получить доступ к вашему элементу. Если это так, вы можете обойти это, добавив операцию TensorFlow, которая извлекает только первый элемент и возвращает именно его.

0

Вы просто не можете получить значение 0-го элемента массива [[1,2,3]], не выполнив (не запустив) операцию, которая бы его возвращала. Дело в том, что до выполнения (run) или оценки (eval) в TensorFlow у вас есть лишь описание того, как получить этот внутренний элемент, поскольку TF использует символические графы/вычисления. Даже если вы используете tf.gather или tf.slice, вам всё равно придется получить значения этих операций через eval/run. Смотрите ответ @mrry.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь