Основы TensorFlow: тензор, форма, тип, сеансы и т. Д. Операторы

Содержание:

Anonim

Что такое тензор?

Название Tensorflow напрямую связано с его основной структурой: Tensor. В Tensorflow во всех вычислениях используются тензоры. Тензор - это вектор или матрица n-мерного размера, представляющая все типы данных. Все значения в тензоре содержат идентичный тип данных с известной (или частично известной) формой. Форма данных - это размерность матрицы или массива.

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

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

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

В этом руководстве вы изучите основы TensorFlow, такие как:

  • Что такое тензор?
  • Представление тензора
  • Типы тензорных
  • Создайте тензор n-мерности
  • Форма тензора
  • Тип данных
  • Оператор создания
  • Некоторые полезные операторы TensorFlow
  • Переменные
  • Заполнитель
  • Сессия
  • График

Представление тензора

В TensorFlow тензор - это набор векторов признаков (т. Е. Массив) n-мерности. Например, если у нас есть матрица 2x3 со значениями от 1 до 6, мы пишем:

Представление тензора

TensorFlow представляет эту матрицу как:

[[1, 2, 3],[4, 5, 6]] 

Если мы создадим трехмерную матрицу со значениями от 1 до 8, мы получим:

TensorFlow представляет эту матрицу как:

[ [[1, 2],[[3, 4],[[5, 6],[[7,8] ] 

Примечание. Тензор может быть представлен скаляром или может иметь форму более трех измерений. Просто более сложно визуализировать более высокий уровень измерения.

Типы тензорных

В TensorFlow все вычисления проходят через один или несколько тензоров. Tf.tensor - это объект с тремя свойствами:

  • Уникальный ярлык (имя)
  • Размер (форма)
  • Тип данных (dtype)

Каждая операция, которую вы будете выполнять с TensorFlow, включает манипуляции с тензором. Вы можете создать четыре основных типа тензора:

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

В этом руководстве вы узнаете, как создать tf.constant и tf.Variable.

Прежде чем мы пройдем через руководство, убедитесь, что вы активировали среду conda с помощью TensorFlow. Мы назвали эту среду hello-tf.

Для пользователя MacOS:

source activate hello-tf 

Для пользователя Windows:

activate hello-tf 

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

# Import tfimport tensorflow as tf 

Создайте тензор n-мерности

Вы начинаете с создания тензора с одним измерением, а именно скаляра.

Чтобы создать тензор, вы можете использовать tf.constant (), как показано в приведенном ниже примере тензорной формы TensorFlow:

tf.constant(value, dtype, name = "")arguments- `value`: Value of n dimension to define the tensor. Optional- `dtype`: Define the type of data:- `tf.string`: String variable- `tf.float32`: Float variable- `tf.int16`: Integer variable- "name": Name of the tensor. Optional. By default, `Const_1:0` 

Чтобы создать тензор размерности 0, запустите следующий код

## rank 0# Default namer1 = tf.constant(1, tf.int16)print(r1)

Выход

Tensor("Const:0", shape=(), dtype=int16) 

# Named my_scalarr2 = tf.constant(1, tf.int16, name = "my_scalar")print(r2) 

Выход

Tensor("my_scalar:0", shape=(), dtype=int16) 

Каждый тензор отображается именем тензора. Каждый тензорный объект определяется с помощью тензорных атрибутов, таких как уникальная метка (имя), размер (форма) и типы данных TensorFlow (dtype).

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

# Decimalr1_decimal = tf.constant(1.12345, tf.float32)print(r1_decimal)# Stringr1_string = tf.constant("Guru99", tf.string)print(r1_string) 

Выход

Tensor("Const_1:0", shape=(), dtype=float32)Tensor("Const_2:0", shape=(), dtype=string) 

Тензор размерности 1 можно создать следующим образом:

## Rank 1r1_vector = tf.constant([1,3,5], tf.int16)print(r1_vector)r2_boolean = tf.constant([True, True, False], tf.bool)print(r2_boolean) 

Выход

Tensor("Const_3:0", shape=(3,), dtype=int16)Tensor("Const_4:0", shape=(3,), dtype=bool) 

Вы можете заметить, что фигура TensorFlow состоит только из 1 столбца.

Чтобы создать массив из 2-х тензорных измерений, вам нужно закрыть скобки после каждой строки. Посмотрите на пример формы Keras Tensor ниже

## Rank 2r2_matrix = tf.constant([ [1, 2],[3, 4] ],tf.int16)print(r2_matrix) 

Выход

Tensor("Const_5:0", shape=(2, 2), dtype=int16) 

Матрица состоит из 2 строк и 2 столбцов, заполненных значениями 1, 2, 3, 4.

Матрица с 3 измерениями строится путем добавления еще одного уровня с помощью скобок.

## Rank 3r3_matrix = tf.constant([ [[1, 2],[3, 4],[5, 6]] ], tf.int16)print(r3_matrix) 

Выход

Tensor("Const_6:0", shape=(1, 3, 2), dtype=int16) 

Матрица выглядит как на картинке два.

Форма тензора

Когда вы печатаете тензор, TensorFlow угадывает форму. Однако вы можете получить форму тензора с помощью свойства формы TensorFlow.

Ниже вы строите матрицу, заполненную числами от 10 до 15, и проверяете форму m_shape.

# Shape of tensorm_shape = tf.constant([ [10, 11],[12, 13],[14, 15] ])m_shape.shape 

Выход

TensorShape([Dimension(3), Dimension(2)]) 

Матрица имеет 3 строки и 2 столбца.

В TensorFlow есть полезные команды для создания вектора или матрицы, заполненной 0 или 1. Например, если вы хотите создать одномерный тензор с определенной формой 10, заполненный 0, вы можете запустить приведенный ниже код:

# Create a vector of 0print(tf.zeros(10)) 

Выход

Tensor("zeros:0", shape=(10,), dtype=float32) 

Свойство работает и для матрицы. Здесь вы создаете матрицу 10x10, заполненную 1

# Create a vector of 1print(tf.ones([10, 10])) 

Выход

Tensor("ones:0", shape=(10, 10), dtype=float32) 

Вы можете использовать форму данной матрицы, чтобы сделать вектор из единиц. Матрица m_shape имеет размер 3x2. Вы можете создать тензор с тремя строками, заполненными одной, с помощью следующего кода:

# Create a vector of ones with the same number of rows as m_shapeprint(tf.ones(m_shape.shape[0])) 

Выход

Tensor("ones_1:0", shape=(3,), dtype=float32) 

Если вы передадите в скобку значение 1, вы можете построить вектор из единиц, равный количеству столбцов в матрице m_shape.

# Create a vector of ones with the same number of column as m_shapeprint(tf.ones(m_shape.shape[1])) 

Выход

Tensor("ones_2:0", shape=(2,), dtype=float32) 

Наконец, вы можете создать матрицу 3x2 только с одним

print(tf.ones(m_shape.shape)) 

Выход

Tensor("ones_3:0", shape=(3, 2), dtype=float32) 

Тип данных

Второе свойство тензора - это тип данных. Тензор может одновременно иметь только один тип данных. Тензор может иметь только один тип данных. Вы можете вернуть тип с помощью свойства dtype.

print(m_shape.dtype) 

Выход

 

В некоторых случаях вы хотите изменить тип данных. В TensorFlow это возможно с помощью метода tf.cast.

Пример

Ниже тензор с плавающей запятой преобразуется в целое число с использованием метода cast.

# Change type of datatype_float = tf.constant(3.123456789, tf.float32)type_int = tf.cast(type_float, dtype=tf.int32)print(type_float.dtype)print(type_int.dtype) 

Выход


 

TensorFlow выбирает тип данных автоматически, если аргумент не указан во время создания тензора. TensorFlow угадает, какие типы данных являются наиболее вероятными. Например, если вы передадите текст, он угадает, что это строка, и преобразует ее в строку.

Оператор создания

Некоторые полезные операторы TensorFlow

Вы знаете, как создать тензор с помощью TensorFlow. Пора научиться выполнять математические операции.

TensorFlow содержит все основные операции. Вы можете начать с простого. Вы будете использовать метод TensorFlow для вычисления квадрата числа. Эта операция проста, потому что для построения тензора требуется только один аргумент.

Квадрат числа строится с помощью tf.sqrt (x) с плавающим числом x.

x = tf.constant([2.0], dtype = tf.float32)print(tf.sqrt(x)) 

Выход

Tensor("Sqrt:0", shape=(1,), dtype=float32) 

Примечание . Выходные данные вернули объект тензора, а не результат квадрата 2. В этом примере вы печатаете определение тензора, а не фактическую оценку операции. В следующем разделе вы узнаете, как TensorFlow выполняет операции.

Ниже приводится список часто используемых операций. Идея та же. Каждая операция требует одного или нескольких аргументов.

  • tf.add (a, b)
  • tf.substract (a, b)
  • tf.multiply (а, б)
  • tf.div (a, b)
  • tf.pow (а, б)
  • tf.exp (а)
  • tf.sqrt (а)

Пример

# Addtensor_a = tf.constant([[1,2]], dtype = tf.int32)tensor_b = tf.constant([[3, 4]], dtype = tf.int32)tensor_add = tf.add(tensor_a, tensor_b)print(tensor_add) 

Выход

Tensor("Add:0", shape=(1, 2), dtype=int32) 

Код Пояснение

Создайте два тензора:

  • один тензор с 1 и 2
  • один тензор с 3 и 4

Вы складываете оба тензора.

Обратите внимание : оба тензора должны иметь одинаковую форму. Вы можете выполнить умножение двух тензоров.

# Multiplytensor_multiply = tf.multiply(tensor_a, tensor_b)print(tensor_multiply) 

Выход

Tensor("Mul:0", shape=(1, 2), dtype=int32) 

Переменные

Пока вы создали только постоянные тензоры. Это не очень полезно. Данные всегда поступают с разными значениями, чтобы зафиксировать это, вы можете использовать класс Variable. Он будет представлять собой узел, значения которого всегда меняются.

Чтобы создать переменную, вы можете использовать метод tf.get_variable ()

tf.get_variable(name = "", values, dtype, initializer)argument- `name = ""`: Name of the variable- `values`: Dimension of the tensor- `dtype`: Type of data. Optional- `initializer`: How to initialize the tensor. OptionalIf initializer is specified, there is no need to include the `values` as the shape of `initializer` is used. 

Например, приведенный ниже код создает двумерную переменную с двумя случайными значениями. По умолчанию TensorFlow возвращает случайное значение. Вы называете переменную var

# Create a Variable## Create 2 Randomized valuesvar = tf.get_variable("var", [1, 2])print(var.shape) 

Выход

(1, 2) 

Во втором примере вы создаете переменную с одной строкой и двумя столбцами. Вам нужно использовать [1,2] для создания измерения переменной

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

var_init_1 = tf.get_variable("var_init_1", [1, 2], dtype=tf.int32, initializer=tf.zeros_initializer)print(var_init_1.shape) 

Выход

(1, 2) 

Вы можете передавать значения постоянного тензора в переменную. Вы создаете постоянный тензор с помощью метода tf.constant (). Вы используете этот тензор для инициализации переменной.

Первые значения переменной - 10, 20, 30 и 40. Новый тензор будет иметь форму 2x2.

# Create a 2x2 matrixtensor_const = tf.constant([[10, 20],[30, 40]])# Initialize the first value of the tensor equals to tensor_constvar_init_2 = tf.get_variable("var_init_2", dtype=tf.int32, initializer=tensor_const)print(var_init_2.shape) 

Выход

(2, 2) 

Заполнитель

Заполнитель предназначен для подачи тензора. Заполнитель используется для инициализации потока данных внутри тензоров. Чтобы предоставить заполнитель, вам нужно использовать метод feed_dict. Заполнитель будет загружен только в течение сеанса.

В следующем примере вы увидите, как создать заполнитель с помощью метода tf.placeholder. На следующем занятии вы научитесь вводить в заполнитель фактическое значение тензора.

Синтаксис:

tf.placeholder(dtype,shape=None,name=None )arguments:- `dtype`: Type of data- `shape`: dimension of the placeholder. Optional. By default, shape of the data- `name`: Name of the placeholder. Optionaldata_placeholder_a = tf.placeholder(tf.float32, name = "data_placeholder_a")print(data_placeholder_a) 

Выход

Tensor("data_placeholder_a:0", dtype=float32) 

Сессия

TensorFlow работает с тремя основными компонентами:

  • График
  • Тензор
  • Сессия
Составные части Описание

График

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

Тензор

Тензор представляет данные, которые прогрессируют между операциями. Ранее вы видели, как инициализировать тензор. Разница между константой и переменной заключается в том, что начальные значения переменной будут меняться со временем.

Сессия

Сеанс выполнит операцию из графика. Чтобы заполнить график значениями тензора, вам нужно открыть сеанс. Внутри сеанса вы должны запустить оператор для создания вывода.

Графики и сеансы независимы. Вы можете запустить сеанс и получить значения, которые будут использоваться позже для дальнейших вычислений.

В приведенном ниже примере вы:

  • Создайте два тензора
  • Создать операцию
  • Открыть сеанс
  • Распечатать результат

Шаг 1) Вы создаете два тензора x и y

## Create, run and evaluate a sessionx = tf.constant([2])y = tf.constant([4]) 

Шаг 2) Вы создаете оператор, умножая x и y

## Create operatormultiply = tf.multiply(x, y) 

Шаг 3) Вы открываете сеанс. Все вычисления будут происходить в рамках сеанса. Когда вы закончите, вам нужно закрыть сеанс.

## Create a session to run the codesess = tf.Session()result_1 = sess.run(multiply)print(result_1)sess.close() 

Выход

[8] 

Объяснение кода

  • tf.Session (): открыть сеанс. Все операции будут проходить в рамках сеансов.
  • выполнить (умножить): выполнить операцию, созданную на шаге 2.
  • print (result_1): Наконец, вы можете распечатать результат
  • close (): закрыть сеанс

Результат показывает 8, что является умножением x и y.

Другой способ создать сеанс - внутри блока. Преимущество в том, что он автоматически закрывает сеанс.

with tf.Session() as sess:result_2 = multiply.eval()print(result_2) 

Выход

[8] 

В контексте сеанса вы можете использовать метод eval () для выполнения операции. Это эквивалент run (). Это делает код более читабельным.

Вы можете создать сеанс и увидеть значения внутри созданных вами тензоров.

## Check the tensors created beforesess = tf.Session()print(sess.run(r1))print(sess.run(r2_matrix))print(sess.run(r3_matrix)) 

Выход

1[[1 2][3 4]][[[1 2][3 4][5 6]]] 

По умолчанию переменные пусты даже после создания тензора. Вам необходимо инициализировать переменную, если вы хотите использовать переменную. Для инициализации значений переменной необходимо вызвать объект tf.global_variables_initializer (). Этот объект явно инициализирует все переменные. Это полезно перед обучением модели.

Вы можете проверить значения переменных, которые вы создали ранее. Обратите внимание, что вам нужно использовать run для оценки тензора

sess.run(tf.global_variables_initializer())print(sess.run(var))print(sess.run(var_init_1))print(sess.run(var_init_2)) 

Выход

[[-0.05356491 0.75867283]][[0 0]][[10 20][30 40]] 

Вы можете использовать созданный ранее заполнитель и ввести в него фактическое значение. Вам нужно передать данные в метод feed_dict.

Например, вы возьмете степень 2 из заполнителя data_placeholder_a.

import numpy as nppower_a = tf.pow(data_placeholder_a, 2)with tf.Session() as sess:data = np.random.rand(1, 10)print(sess.run(power_a, feed_dict={data_placeholder_a: data})) # Will succeed. 

Код Пояснение

  • import numpy as np: импорт библиотеки numpy для создания данных
  • tf.pow (data_placeholder_a, 2): создать операции
  • np.random.rand (1, 10): создать случайный массив данных
  • feed_dict = {data_placeholder_a: data}: заполнить заполнитель данными

Выход

[[0.05478134 0.27213147 0.8803037 0.0398424 0.21172127 0.01444725 0.02584014 0.3763949 0.66022706 0.7565559 ]] 

График

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

На графике показаны узел и ребро . Узел - это представление операции, то есть единица вычисления. Ребро - это тензор, он может создавать новый тензор или потреблять входные данные. Это зависит от зависимостей между отдельными операциями.

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

Посмотрим на пример.

Представьте, что вы хотите оценить следующую функцию:

TensorFlow создаст график для выполнения функции. График выглядит так:

Пример TensorFlow Graph

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

Например, вы можете видеть, что операция добавления не может быть выполнена раньше и. График поясняет, что это будет:

  1. вычислить и:
  2. сложить 1) вместе
  3. добавить к 2)
  4. добавить 3) к
x = tf.get_variable("x", dtype=tf.int32, initializer=tf.constant([5]))z = tf.get_variable("z", dtype=tf.int32, initializer=tf.constant([6]))c = tf.constant([5], name = "constant")square = tf.constant([2], name = "square")f = tf.multiply(x, z) + tf.pow(x, square) + z + c 

Код Пояснение

  • x: инициализировать переменную с именем x постоянным значением 5
  • z: инициализировать переменную с именем z постоянным значением 6
  • c: инициализировать постоянный тензор c с постоянным значением 5
  • квадрат: инициализировать постоянный тензор, называемый квадратом, с постоянным значением 2
  • f: построить оператор

В этом примере мы решили оставить значения переменных фиксированными. Мы также создали постоянный тензор c, который является постоянным параметром в функции f. Он принимает фиксированное значение 5. На графике вы можете увидеть этот параметр в тензоре, называемом константой.

Мы также построили постоянный тензор мощности в операторе tf.pow (). Это не обязательно. Мы сделали это так, чтобы вы могли видеть название тензора на графике. Это круг, называемый квадратом.

Из графика вы можете понять, что произойдет с тензорами и как он может вернуть результат 66.

Приведенный ниже код оценивает функцию в сеансе.

init = tf.global_variables_initializer() # prepare to initialize all variableswith tf.Session() as sess:init.run() # Initialize x and yfunction_result = f.eval()print(function_result) 

Выход

[66] 

Резюме

TensorFlow работает вокруг:

  • График : вычислительная среда, содержащая операции и тензоры
  • Тензоры : представляют данные (или значение), которые будут отображаться на графике. Это ребро в графе
  • Сеансы : разрешить выполнение операций

Создать постоянный тензор

постоянный объект

D0

tf.constant (1, tf.int16)

D1

tf.constant ([1,3,5], tf.int16)

D2

tf.constant ([[1, 2], [3, 4]], tf.int16)

D3

tf.constant ([[[1, 2], [3, 4], [5, 6]]], tf.int16)

Создать оператора

Создать оператора Объект

а + б

tf.add (a, b)

а * б

tf.multiply (а, б)

Создать переменный тензор

Создать переменную

объект

рандомизированное значение

tf.get_variable ("var", [1, 2])

инициализированное первое значение

tf.get_variable ("var_init_2", dtype = tf.int32, initializer = [[1, 2], [3, 4]]])

Открыть сеанс

Сессия объект

Создать сеанс

tf.Session ()

Запустить сеанс

tf.Session.run ()

Вычислить тензор

имя_переменной.eval ()

Закройте сеанс

сесс.close ()

Сессия за блоком

с tf.Session () как сессия: