tf.clip_by_norm
Ограничивает значения тензора до максимальной нормы L2.
tf.clip_by_norm(
t, clip_norm, axes=None, name=None
)
Используется в блокнотах
| Используется в руководстве |
|---|
При заданном тензоре t и максимальном значении ограничения clip_norm, эта операция нормализует t таким образом, что его норма L2 меньше или равна clip_norm вдоль измерений, указанных в axes. В частности, в случае по умолчанию, когда все измерения используются для расчета, если норма L2 t уже меньше или равна clip_norm, то t не изменяется. Если норма L2 больше clip_norm, то эта операция возвращает тензор того же типа и формы, что и t, со значениями, установленными следующим образом:
t * clip_norm / l2norm(t)
В этом случае норма L2 выходного тензора равна clip_norm.
В качестве другого примера, если t является матрицей и axes == [1], то каждая строка выходного результата будет иметь норму L2 меньше или равную clip_norm. Если axes == [0], то каждая колонка выходного результата будет ограничена.
Пример кода:
some_nums = tf.constant([[1, 2, 3, 4, 5]], dtype=tf.float32)
tf.clip_by_norm(some_nums, 2.0).numpy()
array([[0.26967996, 0.5393599 , 0.80903983, 1.0787199 , 1.3483998 ]],
dtype=float32)Эта операция обычно используется для ограничения градиентов перед их применением с оптимизатором. Большинство данных градиентов представляют собой набор тензоров различных форм для различных частей модели. Таким образом, это распространённый случай использования:
# Get your gradients after training
loss_value, grads = grad(model, features, labels)
# Apply some clipping
grads = [tf.clip_by_norm(g, norm)
for g in grads]
# Continue on with training
optimizer.apply_gradients(grads)
| Аргументы | |
|---|---|
t | Tensor или IndexedSlices. Должен быть типа с плавающей запятой. |
clip_norm | 0-мерный (скалярный) Tensor > 0. Максимальное значение ограничения, также с плавающей запятой. Примечание: если предоставлено отрицательное значение clip_norm, оно будет интерпретировано как ноль. |
axes | 1-мерный (векторный) Tensor типа int32, содержащий измерения, используемые для вычисления нормы L2. Если None (по умолчанию), используются все измерения. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
Ограниченный Tensor или IndexedSlices. |
| Исключения | |
|---|---|
ValueError | Если тензор clip_norm не является скалярным тензором 0-й размерности. |
TypeError | Если тип данных входных данных не является типом с плавающей запятой или комплексным типом. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/clip_by_norm