Специальные тензоры: tf.zeros, tf.ones, tf.eye, tf.fill

TensorFlow.js предоставляет набор функций для генерации специальных тензоров, которые часто используются при инициализации данных, создании масок, построении диагональных матриц и заполнении массивов повторяющимися значениями. Основные функции для таких операций — tf.zeros, tf.ones, tf.eye и tf.fill. Каждая из них создает тензор определенного вида и поддерживает гибкую настройку размеров и типов данных.


tf.zeros

Функция tf.zeros создает тензор, полностью заполненный нулями. Это особенно полезно при инициализации весов или при создании пустых массивов для последующих вычислений.

Синтаксис:

tf.zeros(shape, dtype?)
  • shape — массив чисел, определяющий форму тензора. Например, [2, 3] создаст матрицу 2x3.
  • dtype — необязательный параметр, тип данных. По умолчанию используется float32. Допустимые значения: float32, int32, bool, complex64, string.

Пример:

const zerosMatrix = tf.zeros([2, 3]);
zerosMatrix.print();
// [[0, 0, 0],
//  [0, 0, 0]]

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


tf.ones

Функция tf.ones аналогична tf.zeros, но заполняет тензор единицами. Применяется для создания масок, единичных матриц или для операций нормализации.

Синтаксис:

tf.ones(shape, dtype?)

Пример:

const onesVec tor = tf.ones([5]);
onesVector.print();
// [1, 1, 1, 1, 1]

Можно комбинировать с арифметическими операциями:

const scaledOnes = tf.ones([2, 2]).mul(3);
scaledOnes.print();
// [[3, 3],
//  [3, 3]]

tf.eye

Функция tf.eye используется для создания единичной (диагональной) матрицы, где элементы главной диагонали равны 1, а остальные — 0. Полезна при работе с линейной алгеброй, решении систем уравнений, а также при инициализации весов в нейронных сетях.

Синтаксис:

tf.eye(numRows, numColumns?, batchShape?, dtype?)
  • numRows — количество строк.
  • numColumns — количество столбцов (если не указано, равно numRows).
  • batchShape — необязательный массив для создания батчей единичных матриц.
  • dtype — тип данных.

Пример:

const identityMatrix = tf.eye(3);
identityMatrix.print();
// [[1, 0, 0],
//  [0, 1, 0],
//  [0, 0, 1]]

Создание батчей единичных матриц:

const batchedEye = tf.eye(2, 2, [3]);
batchedEye.print();
// [[[1, 0],
//   [0, 1]],
//  [[1, 0],
//   [0, 1]],
//  [[1, 0],
//   [0, 1]]]

tf.fill

Функция tf.fill позволяет создавать тензоры произвольной формы, заполненные одним конкретным значением. Это универсальный инструмент, когда требуется тензор с одинаковыми элементами, отличными от 0 или 1.

Синтаксис:

tf.fill(shape, value, dtype?)
  • shape — форма тензора.
  • value — число или логическое значение для заполнения.
  • dtype — тип данных.

Пример:

const filledTensor = tf.fill([2, 3], 7);
filledTensor.print();
// [[7, 7, 7],
//  [7, 7, 7]]

tf.fill особенно полезен для создания масок или весовых матриц с постоянными значениями, например:

const mask = tf.fill([4, 4], true);
mask.print();
// [[true, true, true, true],
//  [true, true, true, true],
//  [true, true, true, true],
//  [true, true, true, true]]

Общие принципы использования

  1. Эффективность памяти — все эти функции создают тензоры, оптимизированные под вычисления на GPU и CPU. Они используются как базовые строительные блоки для дальнейших операций.
  2. Совместимость с другими операциями TensorFlow.js — полученные тензоры можно передавать в функции add, matMul, reshape и другие.
  3. Поддержка разных типов данных — это позволяет гибко комбинировать тензоры для математических и логических операций.

Эти четыре функции составляют фундаментальный набор для создания структурированных данных в TensorFlow.js и позволяют строить сложные вычислительные графы с минимальными затратами кода и памяти. Они часто применяются совместно с функциями для генерации случайных чисел (tf.randomNormal, tf.randomUniform) и трансформаций (reshape, concat, stack).