TensorFlow Python: Доступ к отдельным элементам в тензоре
Я столкнулся с проблемой при доступе к отдельным элементам в тензоре, например, в тензоре [[1,2,3]]. Мне нужно получить доступ к внутреннему элементу [1,2,3]. Это можно сделать с помощью метода .eval() или через sess.run(), но при больших размерах тензора процесс занимает много времени.
Существует ли способ ускорить этот процесс?
3 ответ(ов)
Я надеюсь, я правильно понял ваш вопрос. Вы можете получить доступ к элементам тензора в TensorFlow 2, используя метод .numpy()
.
import tensorflow as tf
t = tf.constant([[1, 2, 3]])
print(t.numpy()[0][1]) # Это выведет 2
>>> 2
Я подозреваю, что основное время выполнения занимает остальная часть вычислений, а не доступ к одному элементу.
Кроме того, результат может потребовать копирования из памяти, в которой он хранится. Например, если данные находятся на графическом процессоре, их нужно сначала скопировать в оперативную память, прежде чем вы сможете получить доступ к вашему элементу. Если это так, вы можете обойти это, добавив операцию TensorFlow, которая извлекает только первый элемент и возвращает именно его.
Вы просто не можете получить значение 0-го элемента массива [[1,2,3]], не выполнив (не запустив) операцию, которая бы его возвращала. Дело в том, что до выполнения (run) или оценки (eval) в TensorFlow у вас есть лишь описание того, как получить этот внутренний элемент, поскольку TF использует символические графы/вычисления. Даже если вы используете tf.gather или tf.slice, вам всё равно придется получить значения этих операций через eval/run. Смотрите ответ @mrry.
Получить описание исключения и стек вызовов, вызвавших исключение, в виде строки
TensorFlow не найден при использовании pip
Преобразование словаря в JSON
Как создать тестовые и обучающие выборки из одного DataFrame с помощью pandas?
В Python есть функция для сокращения дробей?