Spec-Zone.ru › TensorFlow 1.15

tf.keras.mixed_precision.experimental.Policy

Просмотреть исходный код на GitHub

Политика типа данных для слоя Keras.

Просмотр псевдонимов

Псевдонимы для миграции

См. Руководство по миграции для получения более подробной информации.

`tf.compat.v1.keras.mixed_precision.experimental.Policy`, `tf.compat.v2.keras.mixed_precision.experimental.Policy`

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"

Помимо типа данных или "_with_float32_vars", политика также может быть "infer". Эта политика устарела, и ее не рекомендуется использовать. Когда слой имеет политику infer, он будет определять тип данных вычислений и переменных из первого входного значения в первый раз, когда слой вызывается.

После первого вызова слоя политика слоя изменится на тип данных первого входного значения.

Аналогично политике "infer", существует устаревшая политика "infer_with_float32_vars", которая определяет тип данных вычислений, но не тип данных переменных.

В TensorFlow 1 доступны только политики "infer" и "infer_with_float32_vars".

Аргументы
name Строка. Может иметь одно из следующих значений:
  • Любое имя типа данных, например, '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.
  • 'infer' или 'infer_with_float32_vars' (устарело): Определяет тип данных вычислений по типу данных входных данных.
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", и variable_dtype соответственно равно None или float32.

Обратите внимание, что даже если тип данных вычислений — float16 или bfloat16, аппаратные устройства могут не выполнять отдельные сложения, умножения и другие основные операции в [b]float16, а вместо этого могут выполнять некоторые из них в float32 для повышения числовой устойчивости. Тип данных вычислений — это тип данных входных и выходных данных операций TensorFlow, которые выполняет слой. Внутренне многие операции TensorFlow будут выполнять определенные внутренние вычисления в float32 или в другом внутреннем формате устройства с большей точностью, чем [b]float16, чтобы повысить числовую устойчивость.

Например, слой tf.keras.layers.Dense, при выполнении на GPU с типом данных вычислений float16, передаст входные данные float16 в tf.matmul. Однако tf.matmul будет использовать промежуточные вычисления с плавающей запятой float32. Преимущество производительности float16 все еще очевидно из-за увеличенной пропускной способности памяти и того факта, что у графических процессоров есть специализированное оборудование для вычисления matmul на float16, сохраняя при этом промежуточные вычисления в float32.

loss_scale Возвращает масштаб потерь этой политики.
name Возвращает имя этой политики.
should_cast_variables Возвращает True, если переменные должны быть преобразованы.

Это верно, если тип данных переменных не совпадает с типом данных вычислений.

variable_dtype Тип данных переменных этой политики.

Это тип данных, в котором слои будут создавать свои переменные, если слой явно не выберет другой тип данных. Если это отличается от Policy.compute_dtype и оба не равны None, слои преобразуют переменные в тип данных вычислений, чтобы избежать ошибок типа.

Если это None, политика — "infer", а compute_dtype также None. Если compute_dtype равно None, это либо None, либо float32.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API