Случайные тензоры: tf.randomNormal, tf.randomUniform

TensorFlow.js предоставляет мощные средства для работы с многомерными массивами данных — тензорами. Одной из важных возможностей является генерация случайных тензоров, которые широко применяются в инициализации весов нейронных сетей, тестировании алгоритмов и симуляции данных. Основными функциями для этих целей являются tf.randomNormal и tf.randomUniform.


tf.randomNormal

Функция tf.randomNormal создаёт тензор, элементы которого распределены по нормальному (гауссовскому) закону.

Сигнатура функции:

tf.randomNormal(shape, mean = 0, stdDev = 1, dtype = 'float32', seed)
  • shape — массив целых чисел, определяющий форму тензора. Например, [2, 3] создаёт матрицу 2x3.
  • mean — математическое ожидание распределения (по умолчанию 0).
  • stdDev — стандартное отклонение (по умолчанию 1).
  • dtype — тип данных элементов тензора, обычно 'float32'.
  • seed — необязательный параметр для фиксирования генерации случайных чисел, полезный при повторяемости экспериментов.

Пример использования:

const t = tf.randomNormal([2, 3], 0, 1);
t.print();

Особенности:

  • Случайные значения распределяются по нормальному закону, поэтому большинство элементов сосредоточено около среднего, а экстремальные значения встречаются реже.
  • Использование seed позволяет создавать воспроизводимые эксперименты: каждый запуск с одинаковым seed и формой тензора даст идентичный результат.
  • Можно комбинировать с операциями TensorFlow.js, например, умножением на коэффициенты для масштабирования или добавлением смещения.

tf.randomUniform

Функция tf.randomUniform генерирует тензор, элементы которого равномерно распределены в заданном диапазоне.

Сигнатура функции:

tf.randomUniform(shape, minval = 0, maxval = 1, dtype = 'float32', seed)
  • shape — форма создаваемого тензора.
  • minval — минимальное значение диапазона (включительно, по умолчанию 0).
  • maxval — максимальное значение диапазона (не включительно, по умолчанию 1).
  • dtype — тип данных, 'float32' или 'int32'.
  • seed — фиксирует генерацию случайных чисел.

Пример использования:

const u = tf.randomUniform([3, 3], -1, 1);
u.print();

Особенности:

  • Все элементы имеют одинаковую вероятность попадания в диапазон [minval, maxval).
  • Подходит для случайной инициализации весов нейронных сетей, если важен равномерный разброс значений.
  • При dtype = 'int32' значения округляются до целых чисел в диапазоне [minval, maxval).

Сравнение нормального и равномерного распределений

Параметр tf.randomNormal tf.randomUniform
Тип распределения Нормальное (гауссовское) Равномерное
Концентрация значений Вблизи среднего Равномерно по диапазону
Контроль диапазона Нет точного контроля Есть точный контроль через minval и maxval
Использование Инициализация весов, статистические модели Инициализация весов, случайные выборки, генерация данных

Пример совместного использования:

const normalTensor = tf.randomNormal([2, 2], 0, 0.5);
const uniformTensor = tf.randomUniform([2, 2], -1, 1);

const combined = normalTensor.add(uniformTensor);
combined.print();

Такое сочетание позволяет моделировать более сложные распределения данных, комбинируя случайность двух типов.


Контроль повторяемости

Для исследований, требующих стабильных результатов, крайне важно использовать параметр seed. Пример:

const t1 = tf.randomNormal([2, 2], 0, 1, 'float32', 42);
const t2 = tf.randomNormal([2, 2], 0, 1, 'float32', 42);
console.log(t1.equal(t2).all().dataSync()[0]); // true

Без задания seed результаты генерации будут разными при каждом запуске.


Заключение по использованию

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