tf.keras.mixed_precision.experimental.Policy
| Просмотреть исходный код на GitHub |
Политика типа данных для слоя Keras.
tf.keras.mixed_precision.experimental.Policy(
name, loss_scale=USE_DEFAULT
)
Политика типа данных определяет аспекты, связанные с типом данных, слоя, такие как его вычисления и типы данных переменных. Каждый слой имеет политику. Политики могут быть переданы в аргумент 'dtype' конструкторов слоя, или глобальная политика может быть установлена с помощью 'tf.keras.mixed_precision.experimental.set_policy'. Слой по умолчанию будет использовать глобальную политику, если политика не передана в его конструктор.
Для большинства моделей каждый слой будет иметь одинаковый тип данных вычислений и переменных, который обычно будет float32. Однако, когда используется обучение с смешанной точностью, у большинства слоев вместо этого будет тип данных вычислений float16 и тип данных переменных float32. См. ссылку для получения дополнительной информации об обучении с смешанной точностью. Когда тип данных переменных не соответствует типу данных вычислений, переменные будут автоматически преобразованы в тип данных вычислений, чтобы избежать ошибок типа.
Политики также имеют экземпляр tf.train.experimental.LossScale, который используется моделями для масштабирования потерь. Слои, которые не являются моделями, игнорируют масштаб потерь.
Политики создаются путем передачи строки в конструктор, например tf.keras.mixed_precision.experimental.Policy('float32'). Строка определяет типы данных вычислений и переменных. В настоящее время она может быть одной из следующих форм:
- Любое имя типа данных, например, 'float32' или 'float64'. И тип данных переменных, и тип данных вычислений будут таким типом данных.
- '
_with_float32_vars', где — любой тип данных. Тип данных вычислений будет , а тип данных переменных — float32. Это можно использовать для обучения со смешанной точностью, которое использует float16 или bfloat16 для большинства вычислений и float32 для переменных, но вместо этого рекомендуется использовать политики 'mixed_float16' или 'mixed_bfloat16'. - 'mixed_float16' или 'mixed_bfloat16': Аналогично 'float16_with_float32_vars' или 'bfloat16_with_float32_vars' соответственно. 'mixed_float16' идентичен 'float16_with_float32_vars', за исключением того, что масштаб потерь по умолчанию динамический. 'mixed_bfloat16' в настоящее время идентичен 'bfloat16_with_float32_vars'. В будущем в эти смешанные политики могут быть добавлены дополнительные изменения, чтобы еще больше отличить их от [b]float16_with_float32_vars.
Использование смешанной точности в слоях с политиками
Для использования смешанной точности в модели можно использовать политику 'mixed_float16'. tf.keras.mixed_precision.experimental.set_policy может использоваться для установки политики по умолчанию для слоев, если им не передается политика. Например:
tf.keras.mixed_precision.experimental.set_policy('mixed_float16')
model = tf.keras.models.Sequential(
tf.keras.layers.Input((100,)),
# Dense layers use global policy of 'mixed_float16', which does
# computations in float16 while keeping variables in float32.
tf.keras.layers.Dense(10),
tf.keras.layers.Dense(10),
# Softmax should be done in float32 for numeric stability. We pass
# dtype='float32' to use float32 instead of the global policy.
tf.keras.layers.Activation('Softmax', dtype='float32')
)
model.fit(...) # Train `model`
В качестве альтернативы политика может быть передана отдельным слоям вместо установки глобальной политики с помощью set_policy:
policy = tf.keras.mixed_precision.experimental.Policy('mixed_float16')
model = tf.keras.models.Sequential(
tf.keras.layers.Input((100,)),
tf.keras.layers.Dense(10, dtype=policy),
tf.keras.layers.Dense(10, dtype=policy),
# Softmax should be done in float32 for numeric stability.
tf.keras.layers.Activation('Softmax', dtype='float32')
)
model.fit(...) # Train `model`
Как показано в примере выше, строки могут быть напрямую переданы в конструкторы слоев в аргументе dtype вместо политики, но только если строка может быть преобразована в тип данных.
Устаревшая политика "infer"
Помимо типа данных или "
После первого вызова слоя политика слоя изменится на тип данных первого входного значения.
Аналогично политике "infer", существует устаревшая политика "infer_with_float32_vars", которая определяет тип данных вычислений, но не тип данных переменных.
В TensorFlow 1 доступны только политики "infer" и "infer_with_float32_vars".
| Аргументы | |
|---|---|
name | Строка. Может иметь одно из следующих значений:
|
loss_scale | tf.train.experimental.LossScale, или значение, преобразуемое в него, например, "dynamic". По умолчанию не использует масштабирования потерь, если name не равно "mixed_float16", в этом случае по умолчанию используется "dynamic". Только tf.keras.Model, а не слои, используют масштаб потерь, и он используется только во время Model.fit или Model.train_on_batch. |
| Атрибуты | |
|---|---|
compute_dtype | Тип данных вычислений этой политики. Это тип данных, в котором слои будут выполнять свои вычисления. Если это None, политика равна "infer" или "infer_with_float32_vars", и Обратите внимание, что даже если тип данных вычислений — float16 или bfloat16, аппаратные устройства могут не выполнять отдельные сложения, умножения и другие основные операции в [b]float16, а вместо этого могут выполнять некоторые из них в float32 для повышения числовой устойчивости. Тип данных вычислений — это тип данных входных и выходных данных операций TensorFlow, которые выполняет слой. Внутренне многие операции TensorFlow будут выполнять определенные внутренние вычисления в float32 или в другом внутреннем формате устройства с большей точностью, чем [b]float16, чтобы повысить числовую устойчивость. Например, слой |
loss_scale | Возвращает масштаб потерь этой политики. |
name | Возвращает имя этой политики. |
should_cast_variables | Возвращает True, если переменные должны быть преобразованы. Это верно, если тип данных переменных не совпадает с типом данных вычислений. |
variable_dtype | Тип данных переменных этой политики. Это тип данных, в котором слои будут создавать свои переменные, если слой явно не выберет другой тип данных. Если это отличается от Если это None, политика — "infer", а |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/keras/mixed_precision/experimental/Policy