Что такое тензор
Урок объясняет, что такое тензор, что значат его ранг и форма, и почему всё в 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 должен быть единым.