tf.debugging.enable_check_numerics
Включить проверку числовых значений тензоров в унифицированном режиме eager/graph.
tf.debugging.enable_check_numerics(
stack_height_limit=30, path_length_limit=50
)
Механизм проверки числовых значений заставит любое eager-выполнение или выполнение графа TensorFlow завершиться ошибкой, как только выходной тензор операции содержит бесконечность или NaN.
Этот метод идемпотентен. Его многократное вызов имеет тот же эффект, что и однократное.
Этот метод действует только на потоке, в котором он был вызван.
Когда выходной тензор с плавающей точкой операции содержит бесконечность или NaN, будет выброшено исключение tf.errors.InvalidArgumentError с сообщением об ошибке, содержащим следующую информацию:
- Тип операции, которая сгенерировала тензор с некорректными числовыми значениями.
- Тип данных (dtype) тензора.
- Форма тензора (в той степени, в которой она известна во время eager-выполнения или построения графа).
- Имя содержащего графа (если доступно).
- (Только режим графа): трассировка стека создания операции внутри графа, с ограничением высоты стека и длины пути для наглядности. Фреймы стека, принадлежащие коду пользователя (в отличие от внутреннего кода TensorFlow), выделены стрелкой текста ("->").
- (Только режим eager): количество элементов тензора, нарушающих условия, равных бесконечности и NaN, соответственно.
После включения механизм проверки числовых значений может быть отключен с помощью tf.debugging.disable_check_numerics().
Пример использования:
-
Перехват бесконечности во время выполнения графа
tf.function:import tensorflow as tf tf.debugging.enable_check_numerics() @tf.function def square_log_x_plus_1(x): v = tf.math.log(x + 1) return tf.math.square(v) x = -1.0 # When the following line runs, a function graph will be compiled # from the Python function `square_log_x_plus_1()`. Due to the # `enable_check_numerics()` call above, the graph will contain # numerics checking ops that will run during the function graph's # execution. The function call generates an -infinity when the Log # (logarithm) op operates on the output tensor of the Add op. # The program errors out at this line, printing an error message. y = square_log_x_plus_1(x) z = -y
-
Перехват NaN во время eager-выполнения:
import numpy as np import tensorflow as tf tf.debugging.enable_check_numerics() x = np.array([[0.0, -1.0], [4.0, 3.0]]) # The following line executes the Sqrt op eagerly. Due to the negative # element in the input array, a NaN is generated. Due to the # `enable_check_numerics()` call above, the program errors immediately # at this line, printing an error message. y = tf.math.sqrt(x) z = tf.matmul(y, y)
Примечание: Если ваш код выполняется на TPUs, убедитесь, что вы вызываетеtf.config.set_soft_device_placement(True)перед вызовомtf.debugging.enable_check_numerics(), так как этот API использует автоматическое внешнее компилирование на TPUs. Например:
tf.config.set_soft_device_placement(True) tf.debugging.enable_check_numerics() resolver = tf.distribute.cluster_resolver.TPUClusterResolver(tpu='') strategy = tf.distribute.TPUStrategy(resolver) with strategy.scope(): # ...
| Аргументы | |
|---|---|
stack_height_limit | Ограничение высоты печатной трассировки стека. Применимо только к операциям в tf.function (графах). |
path_length_limit | Ограничение пути файла, включаемого в печатную трассировку стека. Применимо только к операциям в tf.function (графах). |
© 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/versions/r2.9/api_docs/python/tf/debugging/enable_check_numerics