Що таке тензор у TensorFlow? Форма, тип та Operaторс

⚡ Розумний підсумок

Тензори – це n-вимірні масиви, які зчитує та записує кожне обчислення TensorFlow, кожен з яких має ім'я, форму та тип даних. У цьому покроковому посібнику створюються константи, змінні, заповнювачі та оператори, а потім вони обчислюються в рамках сеансу.

  • 🔘 Три властивості: Кожен об'єкт tf.Tensor надає унікальне ім'я, форму та тип даних (dtype).
  • ☑️ Чотири типи тензорів: Класичний API охоплюють tf.constant, tf.Variable, tf.placeholder та tf.SparseTensor.
  • Ранг дорівнює вкладеності: Кожна додаткова пара дужок додає один вимір до кортежу фігури.
  • 🧪 Відкладена оцінка: Виведення операції показує її визначення, а не значення, доки сеанс не запустить її.
  • 🛠️ Графік та сесія: Граф зберігає операції, поки сеанс їх виконує, та повертає результати.
  • ⚠️ Примітка до версії: Сесії та заповнювачі належать до TensorFlow 1.x та сьогодні працюють під назвою tf.compat.v1.

Основи TensorFlow: тензор, форма, тип, сесії та Operaторс

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

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

Тензор може походити з вхідних даних або з результату обчислення. У TensorFlow усі операції виконуються всередині графа. Граф — це набір обчислень, які виконуються послідовно. Кожна операція називається операційним вузлом, а вузли з'єднані один з одним.

Графік окреслює операції та зв'язки між вузлами. Однак, він не відображає значення. Ребро між вузлами – це тензор, тобто спосіб заповнення операції даними.

У машинному навчанні моделі отримують список об'єктів, які називаються векторами ознак. Вектор ознак може мати будь-який тип даних, і зазвичай він є основним вхідним даними, що заповнюють тензор. Ці значення надходять до вузла op через тензор, і результат цієї операції створює новий тензор, який, у свою чергу, використовується в новій операції. Всі ці операції можна переглянути на графіку.

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

У TensorFlow тензор — це набір векторів ознак (тобто масив) n вимірів. Наприклад, якщо у нас є матриця 2×3 зі значеннями від 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.

Перш ніж запускати код, слід пам’ятати про один момент: цей посібник відповідає оригінальному API TensorFlow 1.x, де граф спочатку будується, а потім виконується всередині сеансу. TensorFlow 2 працює швидко за замовчуванням, тому кілька символів нижче було переміщено або видалено. Кожен з них все ще доступний через tf.compat.v1 простір імен, а таблиця відображає кожен із його сучасним аналогом.

Символ TensorFlow 1.x Еквівалент TensorFlow 2
tf.placeholder() Не обов'язково. Приймається оперативне виконання. Python або значення NumPy безпосередньо, та a tf.function параметр відіграє ту саму роль у графічному режимі.
tf.Session() та sess.run() Викликати операцію безпосередньо та прочитати результат або обернути обчислення в tf.function.
tf.get_variable() tf.Variable(), з рівниною Python об'єкти tracвикористовувати змінні замість колекцій.
tf.global_variables_initializer() Не обов'язково. А tf.Variable ініціалізується в момент його створення.
tf.div() tf.divide()Зверніть також увагу, що підпунктtracція оп пишеться tf.subtract(), Чи не tf.substract().

Перш ніж перейти до посібника, переконайтеся, що ви активували середовище conda, в якому встановлено TensorFlow. Це середовище має назву hello-tf.

Для macOS користувачів:

source activate hello-tf

Для Windows користувачів:

activate hello-tf

Після цього ви можете імпортувати TensorFlow.

# Import tf
import 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 name
r1 = tf.constant(1, tf.int16) 
print(r1)			

Вихід

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

Три частини цього виводу відображаються на три властивості тензора, як видно з анотованої версії нижче.

Вихід тензора з анотаціями та позначками, що позначають назву, форму та тип даних

Ви також можете дати тензору власну назву за допомогою name аргумент.

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

Вихід

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

Кожен тензор відображається за його назвою. Кожен об'єкт тензора визначається такими атрибутами, як унікальна мітка (ім'я), розмір (форма) та тип даних TensorFlow (dtype).

Ви можете визначити тензор з десятковими значеннями або з рядком, змінивши тип даних.

# Decimal
r1_decimal = tf.constant(1.12345, tf.float32)
print(r1_decimal)
# String
r1_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 1
r1_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 складається лише з одного стовпця.

Щоб створити масив із 2 тензорних вимірів, потрібно закрити дужки після кожного рядка. Перегляньте приклад форми тензора нижче.

## Rank 2
r2_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 3
r3_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. shape власність

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

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

Вихід

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

Матриця має 3 рядки і 2 стовпці.

У TensorFlow є корисні команди для створення вектора або матриці, заповненої 0 або 1. Наприклад, якщо ви хочете створити одновимірний тензор із певною формою 1, заповненою 10, ви можете запустити код нижче:

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

Вихід

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

Ця властивість також працює для матриці. Тут ви створюєте матрицю 10×10, заповнену 1.

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

Вихід

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

Ви можете використовувати форму заданої матриці для створення вектора одиниць. Матриця m_shape має виміри 3×2, тому наступний код створює тензор з 3 рядками, заповненими одиницями:

# Create a vector of ones with the same number of rows as m_shape
print(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_shape
print(tf.ones(m_shape.shape[1]))

Вихід

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

Зрештою, ви можете створити матрицю 3×2, повністю заповнену одиницями.

print(tf.ones(m_shape.shape))

Вихід

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

Тип даних

Другою властивістю тензора є тип даних. Тензор може містити лише один тип даних одночасно, і ви можете зчитати цей тип за допомогою dtype власність

print(m_shape.dtype)

Вихід

<dtype: &#x27;int32'>

У деяких випадках вам потрібно змінити тип даних. У TensorFlow це можливо завдяки tf.cast метод.

Приклад

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

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

Вихід

<dtype: &#x27;float32'>
<dtype: &#x27;int32'>

TensorFlow автоматично вибирає тип даних, якщо аргумент не вказано під час створення тензора. TensorFlow вгадує найімовірніший тип даних: якщо ви передаєте текст, наприклад, він визначає рядок.

створення Operaтор

Дещо корисне про TensorFlow Operaторс

Ви знаєте, як створити тензор за допомогою 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.subtract(a, b)
  • tf.multiply(a, b)
  • tf.divide(a, b)
  • tf.pow(a, b)
  • tf.exp(a)
  • tf.sqrt(a)

Приклад

# Add
tensor_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)

Code Пояснення

Створіть два тензори:

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

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

Зверніть увагу, що обидва тензори повинні мати однакову форму. Ви також можете виконати множення над двома тензорами.

# Multiply
tensor_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. Optional
If 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 values
var = 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. Новий тензор має форму 2×2.

# Create a 2x2 matrix
tensor_const = tf.constant([[10, 20],
[30, 40]])
# Initialize the first value of the tensor equals to tensor_const
var_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. Optional			
data_placeholder_a = tf.placeholder(tf.float32, name = "data_placeholder_a")
print(data_placeholder_a)

Вихід

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

Session

TensorFlow працює навколо 3 основних компонентів:

  • Графік
  • Тензор
  • Session
компоненти Опис
Графік Граф є фундаментальним у TensorFlow. Усі математичні операції (операції) виконуються всередині графа. Ви можете уявити граф як проект, у якому виконується кожна операція. Вузли представляють ці операції, і вони можуть поглинати або створювати нові тензори.
Тензор Тензор представляє дані, які передаються між операціями. Ви раніше бачили, як ініціалізувати тензор. Різниця між константою та змінною полягає в тому, що початкові значення змінної змінюватимуться з часом.
Session Сеанс виконує операції з графа. Щоб передати графу значення тензора, потрібно відкрити сеанс. Усередині сеансу потрібно виконати оператор для створення виводу.

Графіки та сесії незалежні. Ви можете запустити сесію та зберегти значення для подальших обчислень пізніше.

У прикладі нижче ви:

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

Крок 1) Ви створюєте два тензори x та y

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

Крок 2) Ви створюєте оператор, множачи x та y

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

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

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

Вихід

[8]

Code пояснення

  • tf.Session(): Відкрити сеанс. Усі операції виконуються в межах сеансу.
  • run(multiply): виконати операцію, створену на кроці 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 before
sess = 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 np
power_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.

Code Пояснення

  • 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 відтворює кожну операцію за допомогою схеми потоку даних. Граф потоку даних був розроблений для відображення залежностей даних між окремими операціями. Математична формула або алгоритм складається з низки послідовних операцій, а графік – це зручний спосіб візуалізації того, як ці обчислення координуються.

Граф показує вузли та ребра. Вузол – це представлення операції, тобто одиниця обчислення. Ребро – це тензор: воно може створювати новий тензор або споживати вхідні дані, залежно від залежностей між окремими операціями.

Структура графа пов'язує операції (тобто вузли) разом і показує, як кожна з них обробляється. Зверніть увагу, що графік не відображає результат операцій; він лише допомагає візуалізувати зв'язки між ними.

Розглянемо приклад. Уявіть, що ви хочете обчислити таку функцію:

Формула f для x та z дорівнює x помножити на z плюс x у квадраті плюс z плюс п'ять

TensorFlow будує графік для виконання функції. Графік виглядає так:

Графік TensorFlow з вузлами змінних X та Z, що живлять Mul, Pow та три операції додавання

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

Наприклад, add вузол не може працювати раніше обох Mul та Pow отримали свої результати. Графік показує, що TensorFlow:

  1. обчисліть x·z у Mul вузол та x² у Pow вузол
  2. додайте ці два результати разом у add вузол
  3. додайте z до цієї суми в add_1 вузол
  4. додайте константу 5 до add_2 вузол
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

Code Пояснення

  • x: Ініціалізація змінної під назвою x постійним значенням 5
  • z: Ініціалізація змінної під назвою z постійним значенням 6
  • c: ініціалізувати постійний тензор під назвою c постійним значенням 5
  • квадрат: ініціалізуйте постійний тензор під назвою квадрат із постійним значенням 2
  • f: Побудуйте оператор

У цьому прикладі значення змінних залишаються фіксованими. Тензор констант c є постійним параметром у функції f і приймає фіксоване значення 5; на графіку ви можете побачити цей параметр у тензорі під назвою константа.

Також було створено постійний тензор для степеня в операторі tf.pow()Це не обов'язково, але означає, що показник степеня відображається на графіку у вигляді кола, яке називається квадратом.

З графіка можна простежити, що відбувається з тензорами та чому функція повертає 66: 5 × 6 плюс 5² плюс 6 плюс 5 дорівнює 66.

Наведений нижче код оцінює функцію всередині сеансу.

init = tf.global_variables_initializer() # prepare to initialize all variables
with tf.Session() as sess:
    init.run() # Initialize x and y
    function_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.multiply(a, b)

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

Створіть змінну об'єкт
рандомізоване значення tf.get_variable("var", [1, 2])
ініціалізоване перше значення tf.get_variable("var_init_2", dtype=tf.int32, initializer=[ [1, 2], [3, 4] ])

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

Session об'єкт
Створити сеанс tf.Session()
Запустити сеанс tf.Session.run()
Оцініть тензор variable_name.eval()
Закрити сеанс sess.close()
Сеанс за блоком with tf.Session() as sess:

Поширені запитання

Суфікс — це вихідний індекс операції, яка створила тензор. Const:0 означає перший вихід операції з назвою Const. Операції з кількома виходами нумеруються :0, :1 тощо.

Під час виконання Eager викличте метод тензора numpy() або передайте його до np.array(). У стилі graph-and-session, показаному тут, значення, що повертається sess.run(), вже є numpy масив.

Нерівний тензор містить рядки різної довжини, чого не може зробити звичайний тензор. Він створюється за допомогою tf.ragged.constant і підходить для даних змінної довжини, таких як речення, де доповнення кожного рядка до однієї ширини призведе до марнування пам'яті.

TensorFlow застосовує широкомовлення: він порівнює фігури з кінцевого виміру назад і розтягує будь-яку вісь довжиною один для збігу. Фігури, які неможливо вирівняти таким чином, викликають InvalidArgumentError замість вгадування.

TensorFlow автоматично розміщує операції на видимому графічному процесорі. Щоб примусово активувати пристрій, обгорніть код у блок with tf.device('/GPU:0'). Спочатку використовуйте tf.config.list_physical_devices('GPU'), щоб переконатися, що пристрій дійсно виявлено.

Обидва зберігають типізовані n-вимірні дані, але тензор є незмінним, може знаходитися на графічному процесорі або процесорному процесорі та записує операції, що до нього застосовуються, щоб можна було обчислювати градієнти. Масив NumPy не виконує жодної з цих трьох функцій.

Статичні засоби перевірки типів та бібліотеки анотацій фігур порівнюють оголошені фігури з операціями у вашому коді та позначають невідповідності перед початком виконання. Помічники редактора виводять ті самі попередження вбудовано, що усуває більшість спроб і помилок.ping.

Копілот GitHub пропонує швидке переписування коду сесії та заповнювача з функцією швидкого виконання. Перевіряйте кожну пропозицію, оскільки вона часто пропонує прокладки tf.compat.v1 там, де існує справжня заміна TensorFlow 2.

Підсумуйте цей пост за допомогою: