Подтвердить что ты не робот

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

Я новичок в TensorFlow. Пока я читаю документы. Я нашел термин tensor действительно запутанным. Какая связь между tensor и Variable, tensor vs tf.constant, 'тензор' vs tf.placeholder? Являются ли они все типы тензоров?

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

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

Ответ 2

Из glossary:

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

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

  • заполнителями являются тензоры, к которым вы можете подать значение (с аргументом feed_dict в sess.run())
  • Переменные - это тензоры, которые вы можете обновить (с помощью var.assign()). С технической точки зрения, tf.Variable не является подклассом tf.Tensor, хотя
  • tf.constant - это самый простой тензор, который содержит фиксированное значение, указанное при его создании.

Однако на графике каждая node является операцией, которая может иметь тензоры в качестве входов или выходов.

Ответ 3

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

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

тензор-определение

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

вычисление-граф

Здесь здесь принимают два тензора a и b; умножает тензоры на себя и затем добавляет результат этих умножений для получения тензора результатов t3. И эти умножения и сложение Op происходят в узлах графа вычислений.

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