Как понять тензор в TensorFlow?

Я новичок в TensorFlow. Пока я читаю существующую документацию, я нашел термин tensor очень запутанно. Из-за этого мне нужно уточнить следующие вопросы:

  1. Каковы отношения между tensor и Variable, tensor
    против tf.constant, 'Тензор' и tf.placeholder?
  2. они все типы тензоров?

4 ответов


TensorFlow не имеет первоклассных тензорных объектов, что означает, что нет понятия Tensor в базовом графике, который выполняется средой выполнения. Вместо этого граф состоит из узлов op, соединенных друг с другом, представляющих операции. Операция выделяет память для своих выходов, которые доступны на конечных точках :0, :1 и т. д., И вы можете думать о каждой из этих конечных точек как Tensor. Если у вас есть tensor соответствующую nodename:0 вы можете получить его значение как sess.run(tensor) или sess.run('nodename:0'). Гранулярность выполнения происходит на уровне операции, поэтому run метод выполнит op, который вычислит все конечные точки, а не только :0 конечной точки. Возможно иметь узел Op без выходных данных (например,tf.group), в этом случае с ним не связаны тензоры. Это не возможно, чтобы иметь тензоров без базового узла ОП.

вы можете изучить, что происходит в базовом графике, сделав что-то вроде это

tf.reset_default_graph()
value = tf.constant(1)
print(tf.get_default_graph().as_graph_def())

поэтому с tf.constant вы получаете один узел операции, и вы можете получить его с помощью sess.run("Const:0") или sess.run(value)

аналогично, value=tf.placeholder(tf.int32) создает обычный узел с именем Placeholder, а вы могли бы кормить его как feed_dict={"Placeholder:0":2} или feed_dict={value:2}. Вы не можете кормить и получать заполнитель в том же session.run вызов, но вы можете увидеть результат, прикрепив tf.identity узел сверху и принести.

для переменной

tf.reset_default_graph()
value = tf.Variable(tf.ones_initializer()(()))
value2 = value+3
print(tf.get_default_graph().as_graph_def())

вы увидите, что он создает два узла Variable и Variable/read, the :0 endpoint является допустимым значением для выборки на обоих этих узлах. Однако Variable:0 особое ref тип означает, что его можно использовать в качестве входных данных для мутирующих операций. Результат вызова Python tf.Variable - питон Variable объект и есть некоторая магия Python для замены Variable/read:0 или Variable:0 в зависимости от того, необходима ли мутация. Поскольку большинство ops имеют только 1 конечную точку,:0 упал. Другой пример:Queue -- close() метод создаст новый Close op узел, который подключается к Queue op. Подводя итог -- операции над объектами python, такими как Variable и Queue сопоставление с различными базовыми узлами TensorFlow op в зависимости от использования.

для таких операций, как tf.split или tf.nn.top_k, которые создают узлы с несколькими конечными точками, в Python session.run вызов автоматически переносит вывод в tuple или collections.namedtuple of Tensor объекты, которые могут быть выбраны индивидуально.


С глоссарий:

Тензор-это типизированный многомерный массив. Например, 4-D массив чисел с плавающей запятой, представляющий мини-пакет изображений с размерами [пакет, высота, ширина, канал].

в принципе, каждый данные является тензором в TensorFlow (отсюда и название):

  • заполнители-это тензоры, в которые вы можете ввести значение (с помощью

как уже упоминалось другими, да, все они тензоры.

как я понял, это сначала визуализировать и понимать 1D, 2D, 3D, 4D, 5D и 6D тензоры, как на рисунке ниже. (источник: knoldus)

tensor-definition

теперь, в контексте TensorFlow, вы можете представить себе вычислительный график, подобный приведенному ниже,

computation-graph

здесь Ops возьмите два тензора a и b as вход; умножение тензоры с собой и потом добавляет результат этих умножений для получения результата тензора t3. А эти!--11-->умножение и дополнение Ops происходит на узлах в графе вычислений.

а эти тензоры a и b могут быть постоянными тензорами, переменными тензорами или заполнителями. Неважно, как долго, как они того же самого тип данных и совместимые формы(или broadcastспособный к нему) для достижения операций.


центральным типом данных TensorFlow является тензор. Тензоры являются базовыми компонентами вычисления и фундаментальной структурой данных в TensorFlow. Без использования сложных математических интерпретаций можно сказать, что тензор (в TensorFlow) описывает многомерный числовой массив с нулевым или n-мерным набором данных, определяемым рангом, формой и типом.Подробнее:что такое тензоры в TensorFlow?