Хабрахабр

[Перевод] Тензоры в TensorFlow

image

О том, что такое тензор, какие бывают тензоры, какие у них есть свойства и как ими манипулировать читайте в переводном руководстве с сайта tensorflow.org. Основным объектом которым манипулируют в Tensorflow, является тензор.

Тензор — это обобщение векторов и матриц на более высокие измерения. TensorFlow, как видно из названия, является платформой для определения и выполнения вычислений с использованием тензоров. Внутри TensorFlow тензоры представлены в виде n-мерных массивов базовых типов данных.

Tensor. При написании программы TensorFlow основным объектом, которым вы манипулируете и передаете, является tf. Tensor и подробно описывая, как вычисляется каждый тензор на основе других доступных тензоров, а затем запуская части этого графа для получения результатов вычисления. Программы TensorFlow работают, сначала создавая граф объектов tf.

Tensor обладает следующими параметрами: tf.

  • тип данных (float32, int32, или string, например)
  • размеры (shape)

Размеры (количество измерений и размер каждого измерения) могут быть известны только частично. Все элементы тензора имеют одинаковый тип данных, и он всегда известен. Результатом большинства операций являются тензоры с известными размерами, если размеры на входе также полностью известны, но в некоторых случаях узнать размеры тензора можно только во время исполнения графа.

Основные виды тензоров следующие:

  • tf.Variable
  • tf.constant
  • tf.placeholder
  • tf.SparseTensor

Variable, значение тензора неизменяемо, т.е. За исключением tf. Однако вычисление одного и того же тензора дважды может вернуть различные значения; например, тот же тензор может быть результатом чтения данных с диска, или генерации случайного числа. в контексте одного выполнения тензор может иметь только одно значение.

Ранг

Tensor это количество его измерений. Ранг объекта tf. Обратите внимание, что ранг в TensorFlow это не то же самое, что и ранг матрицы в математике. Синонимами ранга являются порядок, степень, размерность. Как показывает следующая таблица, каждый ранг в Tensorflow соответствует некоторой математической сущности:

Ранг 0

Следующий фрагмент демонстрирует создание нескольких переменных ранга 0:

mammal = tf.Variable("Elephant", tf.string)
ignition = tf.Variable(451, tf.int16)
floating = tf.Variable(3.14159265359, tf.float64)
its_complicated = tf.Variable(12.3 - 4.85j, tf.complex64)

Возможно иметь строковые скаляры, векторы строк и т.д. Замечание: Строка считается единым объектом в TensorFlow, а не последовательностью символов.

Ранг 1

Tensor ранга 1, вы можете передать список элементов в качестве начальных значений. Для создания объекта tf. Например:

mystr = tf.Variable(["Hello"], tf.string)
cool_numbers = tf.Variable([3.14159, 2.71828], tf.float32)
first_primes = tf.Variable([2, 3, 5, 7, 11], tf.int32)
its_very_complicated = tf.Variable([12.3 - 4.85j, 7.5 - 6.23j], tf.complex64)

Ранги более высокого порядка

Tensor состоит как минимум из одной строки и одного столбца: Ранг 2 объекта tf.

mymat = tf.Variable([[7],[11]], tf.int16)
myxor = tf.Variable([[False, True],[True, False]], tf.bool)
linear_squares = tf.Variable([[4], [9], [16], [25]], tf.int32)
squarish_squares = tf.Variable([ [4, 9], [16, 25] ], tf.int32)
rank_of_squares = tf.rank(squarish_squares)
mymatC = tf.Variable([[7],[11]], tf.int32)

Например, при обработке изображений используется много тензоров ранга 4, с размерностями соответствующими номеру примера в пакете, высоте изображения, ширине изображения, и цветовому каналу. Тензоры более высокого ранга, аналогично, состоят из n-мерных массивов.

my_image = tf.zeros([10, 299, 299, 3]) # размер пакета x высота x ширина x количество цветовых каналов

Получение ранга объекта tf.Tensor

Tensor, вызовите метод tf.rank. Для определения ранга объекта tf. Tensor заданного выше: Например, следующий метод программно определяет ранг tf.

r = tf.rank(my_image)
# После запуска графа, r станет равным 4.

Ссылки на срезы tf.Tensor

Tensor это n-мерный массив ячеек, для получения доступа к одной ячейке в tf. Поскольку tf. Tensor вам нужно указать n индексов.

Для тензоров ранга 0 (скаляров), индексы не нужны, поскольку это уже просто число.

Для тензора ранга 1 (вектор), передача единственного индекса даст вам доступ к числу:

my_scalar = my_vector[2]

Tensor, если вы хотите динамически выбрать элемент из вектора. Заметьте что индекс передаваемый в [] может сам быть скаляром tf.

Для tf. Для тензоров ранга 2 или выше ситуация интереснее. Tensor ранга 2, передача двух чисел возвращает как и ожидалось скаляр:

my_scalar = my_matrix[1, 2]

Передача одного числа, однако, возвращает подвектор матрицы следующим образом:

my_row_vector = my_matrix[2]
my_column_vector = my_matrix[:, 3]

Это полезно в тензорах высокого ранга, поскольку позволяет получить доступ к подвекторам, подматрицам и даже другим подтензорам. Нотация : в синтаксисе выделения подмассива в python используется как "оставьте это измерение в покое".

Размеры

Документация TensorFlow использует три условных обозначения для описания размерности тензора: ранг, размеры и количество измерений. Размеры тензора это количество элементов в каждом измерении. Следующая таблица показывает как они соотносятся друг с другом:

TensorShape. Размеры могут быть представлены в виде списков Python/кортежей целых чисел, или с помощью
tf.

Получение размера объекта tf.Tensor

Tensor. Есть два способа получить размеры tf. Это можно сделать, прочитав свойство shape объекта tf. При построении графа часто полезно спросить, что уже известно о размерах тензора. Этот метод возвращает объект TensorShape, который является удобным способом
представления частично определенных размеров (поскольку при построении графа не все размеры могут быть полностью известны). Tensor
.

Tensor который представляет полностью определенные размеры другого tf. Также можно получить tf. Это делается вызовом операции tf.shape. Tensor во время выполнения. Tensor. Этим способом вы можете построить граф, который манипулирует размерами тензоров строя другие тензоры зависящие от динамических размеров входных tf.

Например, так можно сделать вектор нулей того же размера, что и число столбцов данной матрицы:

zeros = tf.zeros(my_matrix.shape[1])

Изменение размеров tf.Tensor

Количество элементов скаляра всегда равно 1. Количество элементов тензора это произведение всех его измерений. Tensor, не изменяя его элементы. Так как много разных размеров могут давать одно и то же число элементов часто удобно менять размеры tf. Это может быть сделано с помощью tf.reshape.

Следующие примеры показывают как изменить размеры тензора:

rank_three_tensor = tf.ones([3, 4, 5])
matrix = tf.reshape(rank_three_tensor, [6, 10]) # Преобразование существущих данных # в матрицу 6x10 matrixB = tf.reshape(matrix, [3, -1]) # Преобразование существующих данных в # матрицу 3x20. -1 говорит reshape что нужно # посчитать размер этого измерения.
matrixAlt = tf.reshape(matrixB, [4, 3, -1]) # Преобразование существующих данных в # тензор 4x3x5 # Отметим, что число элементов в преобразованных тензорах должно совпадать
# с изначальным количеством. Поэтому следующий пример породит
# ошибку поскольку нет такого значения для последнего измерения
# при котором совпадет количество элементов.
yet_another = tf.reshape(matrixAlt, [13, 2, -1]) # ERROR!

Типы данных

У конкретного tf. В дополнение к размерности, у тензоров есть тип данных. Однако, возможно сериализовать произвольные структуры данных в string и хранить их в tf. Tensor не может быть более одного типа данных. Tensor.

Tensor из одного типа данных в другой используя tf.cast: Можно преобразовать tf.

# Преобразование константного целочисленного тензора в тензор с плавающей запятой.
float_tensor = tf.cast(tf.constant([1, 2, 3]), dtype=tf.float32)

Tensor используйте свойство Tensor.dtype. Чтобы посмотреть тип данных tf.

Tensor из объекта python вы можете опционально указать тип данных. При создании tf. TensorFlow преобразует целые числа Python в tf.int32, а числа с плавающей запятой в tf.float32. Если вы этого не сделаете, TensorFlow выберет тип данных который может представлять ваши данные. В других случаях TensorFlow использует те же правила что и numpy при конвертации массивов.

Оценка тензоров

Tensor и извлечь присвоенное ему значение. Как только был построен вычислительный граф, вы можете запустить вычисление, которое
сгенерирует определенный tf. Это часто полезно для отладки, а также для работы большей части TensorFlow.

Например: Самый простой способ оценить Tensor — использовать метод Tensor.eval.

constant = tf.constant([1, 2, 3])
tensor = constant * constant
print(tensor.eval())

Session. Метод eval работает только когда активна сессия по умолчанию tf. Tensor.eval возвращает массив numpy с тем же содержанием что и тензор.

Tensor без контекста, потому что его значение может зависеть от динамической информации, которая недоступна. Иногда невозможно оценить tf. Например, тензоры, зависящие от placeholder, не могут быть оценены без предоставления значения для placeholder.

p = tf.placeholder(tf.float32)
t = p + 1.0
t.eval() # Это не сработает, потому что placeholder не получил значение.
t.eval(feed_dict=) # Это сработает, потому что мы передает # значение в placeholder.

Tensor, не только placeholder. Обратите внимание, что можно использовать любой tf.

Tensor. Конструкции других моделей могут усложнить оценивание tf. Tensor определенные внутри функций или внутри конструкций потока управления. TensorFlow не может оценить напрямую tf. Tensor зависит от значения из очереди, оценка tf. Если tf. При работе с очередями, не забывайте вызвать tf.train.start_queue_runners перед оценкой любого tf. Tensor сработает только когда что-то поместят в очередь; в противном случае, оценка тензора зависнет. Tensor.

Если вы хотите поучаствовать в переводе документации сайта Tensorflow.org на русский, обращайтесь в личку или комментарии. После проверки перевод появится также на сайте Tensorflow.org. Любые исправления и замечания приветствуются.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть