#python #tensorflow #tensorrt
#python #тензорный поток #tensorrt
Вопрос:
Я использую TensorFlow 1.14 и тестирую TensorRT; как я вижу в документации, TensorRT поддерживает 3 режима точности: «FP32», «FP16» и «INT8». Итак, я хочу знать, каков режим точности по умолчанию в TensorFlow; Я полагаю, что это FP32, но я не совсем уверен в этом?
Ответ №1:
Точность TensorRT по умолчанию равна Float32. Смотрите здесь
Точность тензорного потока по умолчанию также Float32. Смотрите здесь
Вы можете подтвердить это с помощью:
Код:
import tensorflow as tf
tf.keras.backend.floatx()
вывод:
'float32'
Если вы хотите изменить это поведение или использовать другую точность:
Вы можете использовать метод set_floatx.
tf.keras.backend.set_floatx('float64')
Примечание: Не рекомендуется устанавливать значение float16 для обучения, так как это, вероятно, вызовет проблемы со стабильностью чисел.
Комментарии:
1. Использование
float16
совершенно нормально. Вам просто нужно не забыть увеличить размер каждого эпсилона, используемого в реализации (например, в Adam, log или div), поскольку некоторые значения по умолчанию могут быть слишком малы для базовой точности, что приводит к значениям 0.0.2. @runDOSrun Смотрите здесь . Это написано в официальной документации TensorFlow. Кроме того, можете ли вы подробнее рассказать об увеличении размера epsilon?
3. Спасибо за источник! Несколько реализаций TF базовых операций требуют добавления небольшого числа (обычно называемого epsilon e), чтобы избежать NAN. Самым простым примером может быть div(a,0) := a/0 . На самом деле мы не хотим, чтобы это вызывало исключение, потому что на самом деле это происходит довольно часто (особенно в оптимизаторе / потере). Решение: div(a,b) := a/(b e) где e=1e-7. Однако 32-битный код дает вам ровно 7 десятичных разрядов точности. Если мы уменьшаем точность, нам нужно увеличить episilons, чтобы избежать появления NAN повсюду. Я предполагаю, что однажды они добавят динамические проверки для этого.
Ответ №2:
Точность весов по умолчанию в tensorflow равна ‘float32’, как видно из документации по функции инициализации веса здесь: https://github.com/tensorflow/tensorflow/blob/6bfbcf31dce9a59acfcad51d905894b082989012/tensorflow/python/ops/init_ops.py#L527
Однако входные данные могут иметь множественную точность, поддерживаемую различными слоями, используемыми в модели.
Теперь, в основном, вы хотели бы уменьшить размер модели (который формируется по весам модели) после обучения, чтобы иметь возможность развертывать. За это время вы могли бы снизить точность веса модели до FP16.