Функция clip_by_global_norm
Функция clip_by_global_norm выполняет глобальное ограничение нормы для группы тензоров.
Первым параметром функция принимает список тензоров t_list.
Вторым параметром передается максимально допустимое значение глобальной нормы clip_norm.
Третьим необязательным параметром можно указать use_norm - заранее вычисленную норму.
Функция возвращает кортеж из двух элементов: список масштабированных тензоров и глобальную норму.
Если общая норма всех тензоров превышает clip_norm, то каждый тензор умножается на коэффициент clip_norm / global_norm.
В противном случае тензоры остаются без изменений.
Синтаксис
tf.clip_by_global_norm(t_list, clip_norm, [use_norm])
Пример
Давайте создадим два тензора и ограничим их глобальную норму значением 5:
import tensorflow as tf
t1 = tf.constant([1.0, 2.0, 3.0])
t2 = tf.constant([4.0, 5.0, 6.0])
clipped, norm = tf.clip_by_global_norm([t1, t2], 5.0)
print(clipped[0])
print(clipped[1])
print(norm)
Результат выполнения кода:
tf.Tensor([0.39834023 0.79668045 1.1950207], shape=(3,), dtype=float32)
tf.Tensor([1.593361 1.9917012 2.3900414], shape=(3,), dtype=float32)
tf.Tensor(12.552184, shape=(), dtype=float32)
Пример
Давайте рассмотрим случай, когда глобальная норма не превышает заданное значение:
import tensorflow as tf
t1 = tf.constant([1.0, 2.0, 3.0])
t2 = tf.constant([4.0, 5.0, 6.0])
clipped, norm = tf.clip_by_global_norm([t1, t2], 20.0)
print(clipped[0])
print(clipped[1])
print(norm)
Результат выполнения кода:
tf.Tensor([1. 2. 3.], shape=(3,), dtype=float32)
tf.Tensor([4. 5. 6.], shape=(3,), dtype=float32)
tf.Tensor(12.552184, shape=(), dtype=float32)
Пример
Давайте передадим заранее вычисленную норму через параметр use_norm:
import tensorflow as tf
t1 = tf.constant([1.0, 2.0, 3.0])
t2 = tf.constant([4.0, 5.0, 6.0])
use_norm = tf.constant(12.552184)
clipped, norm = tf.clip_by_global_norm([t1, t2], 5.0, use_norm=use_norm)
print(clipped[0])
print(clipped[1])
print(norm)
Результат выполнения кода:
tf.Tensor([0.39834023 0.79668045 1.1950207], shape=(3,), dtype=float32)
tf.Tensor([1.593361 1.9917012 2.3900414], shape=(3,), dtype=float32)
tf.Tensor(12.552184, shape=(), dtype=float32)
Смотрите также
-
функцию
clip_by_value,
которая ограничивает значения тензора диапазоном -
функцию
clip_by_norm,
которая ограничивает норму одного тензора -
функцию
reduce_sum,
которая вычисляет сумму элементов тензора -
функцию
sqrt,
которая вычисляет квадратный корень