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

Урок объясняет, что такое тензор, что значат его ранг и форма, и почему всё в TF — это тензоры.

Тензор — это многомерный массив чисел одного типа; обобщение скаляра (0 измерений), вектора (1) и матрицы (2) на любое число измерений.

Имя «TensorFlow» буквально означает «поток тензоров»: данные текут через сеть в виде тензоров. Картинка — это тензор пикселей, текст — тензор кодов слов, веса слоя — тоже тензоры. Понять тензоры — значит понять, из чего сделано всё остальное.

Ранг и форма

Ранг — число измерений (осей). Форма (shape) — сколько элементов вдоль каждой оси.

ОбъектРангПример формы
скаляр0()
вектор1(3,)
матрица2(2, 3)
цветная картинка3(28, 28, 3)
батч картинок4(32, 28, 28, 3)

Чтобы пощупать ранг и форму без TensorFlow, сэмулируем их на чистом Python — вложенные списки. Этот код запускается в браузере:

def shape(x):
    dims = []
    while isinstance(x, list):
        dims.append(len(x))
        x = x[0]
    return tuple(dims)

scalar = 7
vector = [1, 2, 3]
matrix = [[1, 2, 3], [4, 5, 6]]

print("скаляр, ранг:", 0)
print("вектор, форма:", shape(vector), "ранг:", len(shape(vector)))
print("матрица, форма:", shape(matrix), "ранг:", len(shape(matrix)))

Вывод:

скаляр, ранг: 0
вектор, форма: (3,) ранг: 1
матрица, форма: (2, 3) ранг: 2

Как создают тензоры в TF

В TensorFlow тензоры создают через tf.constant (неизменяемый) и tf.Variable (изменяемый — для весов). Код требует TF и в браузере не идёт:

import tensorflow as tf

t = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
print(t.shape)   # (2, 3)
print(t.dtype)   # float32
print(t.ndim)    # 2 — ранг

w = tf.Variable([0.0, 0.0])  # обучаемый вес
w.assign([1.0, 2.0])

Как работает под капотом

Тензор хранится в памяти как плоский непрерывный блок чисел плюс метаданные о форме. Когда вы «меняете форму» через tf.reshape, сами числа не двигаются — меняется лишь то, как TF их интерпретирует. Поэтому reshape почти бесплатен, а вот тип данных (dtype) должен быть единым: тензор не может смешивать целые и дробные в одном массиве.

Частые ошибки

  • Путать ранг и размер. Ранг — это число осей, а не количество элементов.
  • Смешивать типы. Сложение int32 и float32 тензоров даёт ошибку — приводите тип через tf.cast.
  • Менять tf.constant. Константы неизменяемы; для обучаемых параметров нужен tf.Variable.

Итог

  • Тензор — многомерный массив чисел одного типа; всё в TF представлено тензорами.
  • Ранг — число осей, форма — длины по каждой оси.
  • tf.constant — неизменяемый, tf.Variable — изменяемый (для весов).
  • reshape меняет интерпретацию формы, не двигая данные; dtype должен быть единым.
Проверьте себя
1. Что такое ранг тензора?
AКоличество элементов в нём
BЧисло измерений (осей)
CТип данных тензора
DЕго максимальное значение
2. Какая форма у батча из 32 цветных картинок 28×28?
A(28, 28, 3)
B(32, 28, 28, 3)
C(32, 28, 28)
D(3, 28, 28)
3. Чем tf.Variable отличается от tf.constant?
AVariable изменяем и подходит для весов, constant — нет
BVariable быстрее
Cconstant можно обучать, Variable нельзя
DРазницы нет