TensorFlow.js предоставляет мощный набор инструментов для работы с тензорами, включая операции сравнения и логические операции. Эти операции позволяют проводить фильтрацию данных, создавать маски для выборки элементов, реализовывать условные вычисления и управлять потоками данных в модели.
Операции сравнения в TensorFlow.js возвращают тензоры типа
bool, где каждый элемент указывает результат
сравнения соответствующих элементов исходных тензоров. Основные
функции:
tf.equal(a, b) — проверяет, равны ли
элементы тензоров a и b.tf.notEqual(a, b) — проверяет
неравенство элементов.tf.greater(a, b) — возвращает
true, если элемент a больше элемента
b.tf.greaterEqual(a, b) — возвращает
true, если элемент a больше или равен элементу
b.tf.less(a, b) — возвращает
true, если элемент a меньше элемента
b.tf.lessEqual(a, b) — возвращает
true, если элемент a меньше или равен элементу
b.Пример использования:
const a = tf.tensor([1, 3, 5]);
const b = tf.tensor([2, 3, 4]);
const eq = tf.equal(a, b); // [false, true, false]
const gt = tf.greater(a, b); // [false, false, true]
const le = tf.lessEqual(a, b); // [true, true, false]
Каждая из этих функций поддерживает broadcasting, что позволяет сравнивать тензоры разных форм. Например:
const x = tf.tensor([1, 2, 3]);
const y = tf.scalar(2);
const result = tf.greater(x, y); // [false, false, true]
Логические операции работают с тензорами типа bool и
позволяют комбинировать условия:
tf.logicalAnd(a, b) — поэлементная
логическая конъюнкция (AND).tf.logicalOr(a, b) — поэлементная
логическая дизъюнкция (OR).tf.logicalNot(a) — поэлементное
отрицание (NOT).tf.logicalXor(a, b) — поэлементное
исключающее ИЛИ (XOR).Пример:
const p = tf.tensor([true, false, true]);
const q = tf.tensor([false, false, true]);
const andResult = tf.logicalAnd(p, q); // [false, false, true]
const orResult = tf.logicalOr(p, q); // [true, false, true]
const notResult = tf.logicalNot(p); // [false, true, false]
Подобные операции особенно полезны при создании масок для фильтрации данных, например:
const data = tf.tensor([10, 20, 30, 40]);
const mask = tf.greater(data, tf.scalar(25)); // [false, false, true, true]
const filtered = data.mul(mask.cast('int32')); // [0, 0, 30, 40]
В TensorFlow.js условные операции позволяют применять элементы тензора только при выполнении определённого условия. Основные подходы:
tf.where(condition, a, b) — возвращает
элементы из a, если условие condition истинно,
иначе элементы из b.tf.booleanMaskAsync(x, mask) —
асинхронно извлекает элементы тензора x, где маска
mask равна true.Пример применения tf.where:
const x = tf.tensor([1, 2, 3, 4]);
const y = tf.tensor([10, 20, 30, 40]);
const condition = tf.less(x, tf.scalar(3));
const result = tf.where(condition, x, y); // [1, 2, 30, 40]
Логические операции можно комбинировать для сложных условий. Например, фильтрация значений, которые находятся в определённом диапазоне:
const data = tf.tensor([5, 10, 15, 20, 25]);
const lowerBound = tf.greaterEqual(data, tf.scalar(10));
const upperBound = tf.lessEqual(data, tf.scalar(20));
const rangeMask = tf.logicalAnd(lowerBound, upperBound); // [false, true, true, true, false]
const filtered = data.mul(rangeMask.cast('int32')); // [0, 10, 15, 20, 0]
bool можно преобразовать в
числовые типы через .cast('float32') или
.cast('int32'), что удобно для дальнейших вычислений и
интеграции с другими слоями модели.Операции сравнения и логические операции часто применяются в:
Эти инструменты обеспечивают гибкость и контроль над процессом вычислений, сохраняя преимущества GPU-вычислений и векторизации.