Основи 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.Змінна
  • tf. постійний
  • tf.placeholder
  • tf.SparseTensor

У цьому підручнику ви дізнаєтесь, як створити tf.constant та tf.Variable.

Перш ніж ми розглянемо підручник, переконайтеся, що ви активували середовище конда з 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. Наприклад, якщо ви хочете створити 1-D тензор з певною формою 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. Ви можете створити тензор із 3 рядків, заповнених одним із наступним кодом:

# 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.

Приклад

Нижче плаваючий тензор перетворюється на ціле число, використовуючи метод приведення.

# 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. резюме (a, b)
  • tf. помножити (a, b)
  • tf.div (a, b)
  • tf.pow (a, b)
  • 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 працює навколо 3 основних компонентів:

  • Графік
  • Тензор
  • Сесія
Компоненти Опис

Графік

Графік є основним у 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

Ви можете легко побачити шлях, яким пройдуть тензори, щоб дійти до кінцевого пункту призначення.

Наприклад, ви можете бачити, як операцію add не можна робити раніше, ніж. Графік пояснює, що він:

  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)

Створіть оператора

Створіть оператора Об'єкт

a + b

tf.add (a, b)

a * b

tf. помножити (a, b)

Створіть тензор змінної

Створіть змінну

об'єкт

рандомізоване значення

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

ініціалізоване перше значення

tf.get_variable ("var_init_2", dtype = tf.int32, ініціалізатор = [[1, 2], [3, 4]])

Відкрийте сеанс

Сесія об'єкт

Створити сеанс

tf.Session ()

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

tf.Session.run ()

Оцініть тензор

ім'я_змінної.eval ()

Закрийте сесію

sess.close ()

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

з tf.Session () як sess: