Spec-Zone.ru › TensorFlow

tf.keras.Layer

Это базовый класс, от которого наследуются все слои.

Наследуется от: Operation

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

Основные псевдонимы

tf.keras.layers.Layer

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

Подробнее см. в руководстве по миграции.

tf.compat.v1.keras.Layer

tf.keras.Layer(
    *,
    activity_regularizer=None,
    trainable=True,
    dtype=None,
    autocast=True,
    name=None,
    **kwargs
)

Используется в блокнотах

Используется в руководстве Используется в учебных материалах
  • Использование моделей TF1.x в рабочих процессах TF2
  • Проверка корректности и численной эквивалентности
  • Введение в модули, слои и модели
  • Типы расширений
  • Отладка перенесенного конвейера обучения TensorFlow 2
  • Загрузка текста
  • Масштабируемое сжатие моделей
  • Перенос обучения с YAMNet для классификации звуков окружающей среды
  • Пользовательские слои
  • Аугментация данных

Слой — это вызываемый объект, который принимает на вход один или несколько тензоров и возвращает один или несколько тензоров. Он включает в себя вычисления, определенные в методе call(), и состояние (переменные весов). Состояние можно создавать:

  • в __init__(), например с помощью self.add_weight();
  • в необязательном методе build(), который вызывается при первом обращении __call__() к слою и получает форму (формы) входных данных, которая могла быть неизвестна во время инициализации.

Слои можно рекурсивно компоновать: если назначить экземпляр Layer атрибутом другого Layer, внешний слой начнет отслеживать веса, созданные внутренним слоем. Вложенные слои следует создавать в методе __init__() или build().

Пользователи просто создают экземпляр слоя, а затем используют его как вызываемый объект.

Аргументы
trainable Логическое значение, указывающее, должны ли переменные слоя обучаться.
name Строковое имя слоя.
dtype Тип данных вычислений и весов слоя. Также может быть объектом keras.DTypePolicy, позволяющим использовать разные типы данных для вычислений и весов. По умолчанию используется None. None означает, что используется keras.config.dtype_policy(), которая представляет собой политику float32, если для нее не задано другое значение (с помощью keras.config.set_dtype_policy()).

Рекомендуем, чтобы классы-наследники Layer реализовывали следующие методы:

  • __init__(): определяет пользовательские атрибуты слоя и создает веса слоя, не зависящие от формы входных данных, используя add_weight() или другое состояние.
  • build(self, input_shape): этот метод можно использовать для создания весов, зависящих от формы (форм) входных данных, используя add_weight() или другое состояние. __call__() автоматически выполнит сборку слоя (если она еще не была выполнена), вызвав build().
  • call(self, *args, **kwargs): вызывается в __call__ после проверки того, что был вызван build(). call() выполняет логику применения слоя к входным аргументам. В call() можно при необходимости использовать два зарезервированных именованных аргумента: 1. training (логическое значение, указывающее, выполняется ли вызов в режиме вывода или обучения). 2. mask (логический тензор, кодирующий маскированные временные шаги во входных данных; например, используется в слоях RNN). Типичная сигнатура этого метода: call(self, inputs); при необходимости пользователь может добавить training и mask, если они нужны слою.
  • get_config(self): возвращает словарь с конфигурацией, использованной для инициализации этого слоя. Если ключи отличаются от аргументов в __init__(), переопределите также from_config(self). Этот метод используется при сохранении слоя или модели, содержащей этот слой.

Примеры:

Вот простой пример: слой с двумя переменными, w и b, который возвращает y = w . x + b. В нем показано, как реализовать build() и call(). Переменные, заданные в качестве атрибутов слоя, отслеживаются как веса слоев (в layer.weights).

class SimpleDense(Layer):
    def __init__(self, units=32):
        super().__init__()
        self.units = units

    # Create the state of the layer (weights)
    def build(self, input_shape):
        self.kernel = self.add_weight(
            shape=(input_shape[-1], self.units),
            initializer="glorot_uniform",
            trainable=True,
            name="kernel",
        )
        self.bias = self.add_weight(
            shape=(self.units,),
            initializer="zeros",
            trainable=True,
            name="bias",
        )

    # Defines the computation
    def call(self, inputs):
        return ops.matmul(inputs, self.kernel) + self.bias

# Instantiates the layer.
linear_layer = SimpleDense(4)

# This will also call `build(input_shape)` and create the weights.
y = linear_layer(ops.ones((2, 2)))
assert len(linear_layer.weights) == 2

# These weights are trainable, so they're listed in `trainable_weights`:
assert len(linear_layer.trainable_weights) == 2

Помимо обучаемых весов, обновляемых обратным распространением ошибки во время обучения, у слоев могут быть и необучаемые веса. Эти веса предназначены для обновления вручную во время call(). Ниже приведен пример слоя, вычисляющего скользящую сумму своих входных данных:

class ComputeSum(Layer):

  def __init__(self, input_dim):
      super(ComputeSum, self).__init__()
      # Create a non-trainable weight.
      self.total = self.add_weight(
        shape=(),
        initializer="zeros",
        trainable=False,
        name="total",
      )

  def call(self, inputs):
      self.total.assign(self.total + ops.sum(inputs))
      return self.total

my_sum = ComputeSum(2)
x = ops.ones((2, 2))
y = my_sum(x)

assert my_sum.weights == [my_sum.total]
assert my_sum.non_trainable_weights == [my_sum.total]
assert my_sum.trainable_weights == []
Атрибуты
name Имя слоя (строка).
dtype Тип данных весов слоя. Псевдоним layer.variable_dtype.
variable_dtype Тип данных весов слоя.
compute_dtype Тип данных вычислений слоя. Слои автоматически преобразуют входные данные к этому типу, поэтому вычисления и выходные данные также имеют этот тип. При использовании смешанной точности с keras.DTypePolicy он будет отличаться от variable_dtype.
trainable_weights Список переменных, включаемых в обратное распространение ошибки.
non_trainable_weights Список переменных, не включаемых в обратное распространение ошибки.
weights Объединение списков trainable_weights и non_trainable_weights (в указанном порядке).
trainable Следует ли обучать слой (логическое значение), то есть возвращать ли его потенциально обучаемые веса в составе layer.trainable_weights.
input_spec Необязательный объект или список объектов InputSpec, задающих ограничения на входные данные, которые может принимать слой.
dtype_policy
input Возвращает входные тензоры символической операции.

Возвращаются только тензоры, соответствующие первому вызову операции.

input_dtype Тип данных, к которому следует преобразовывать входные данные слоя.
losses Список скалярных потерь из add_loss, регуляризаторов и вложенных слоев.
metrics Список всех метрик.
metrics_variables Список всех переменных метрик.
non_trainable_variables Список всех необучаемых состояний слоя.

В дополнение к layer.non_trainable_weights сюда входит все состояние, используемое слоем, включая состояние метрик и SeedGenerator.

output Возвращает выходные тензоры слоя.

Возвращаются только тензоры, соответствующие первому вызову операции.

supports_masking Поддерживает ли этот слой вычисление маски с помощью compute_mask.
trainable_variables Список всех обучаемых состояний слоя.

Эквивалентно layer.trainable_weights.

variables Список всех состояний слоя, включая начальные значения генератора случайных чисел.

В дополнение к layer.weights сюда входит все состояние, используемое слоем, включая SeedGenerator.

Обратите внимание: переменные метрик сюда не включены. Чтобы получить доступ ко всем переменным метрик, используйте metrics_variables.

Методы

add_loss

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

add_loss(
    loss
)

Можно вызвать внутри метода call(), чтобы добавить скалярную потерю.

Пример:

class MyLayer(Layer):
    ...
    def call(self, x):
        self.add_loss(ops.sum(x))
        return x

add_metric

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

add_metric()

add_variable

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

add_variable(
    shape,
    initializer,
    dtype=None,
    trainable=True,
    autocast=True,
    regularizer=None,
    constraint=None,
    name=None
)

Добавляет переменную веса в слой.

Псевдоним add_weight().

add_weight

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

add_weight(
    shape=None,
    initializer=None,
    dtype=None,
    trainable=True,
    autocast=True,
    regularizer=None,
    constraint=None,
    aggregation='mean',
    name=None
)

Добавляет переменную веса в слой.

Аргументы
shape Кортеж формы переменной. Форма должна быть полностью определена (не допускаются элементы None). Если значение не задано, по умолчанию используется () (скаляр).
initializer Объект-инициализатор для задания начального значения переменной или строковое имя встроенного инициализатора (например, "random_normal"). Если значение не задано, для переменных с плавающей точкой используется "glorot_uniform", а для всех остальных типов (например, int, bool) — "zeros".
dtype Тип данных создаваемой переменной, например "float32". Если значение не задано, используется тип данных переменных слоя (по умолчанию "float32", если не задано иное).
trainable Логическое значение, указывающее, должна ли переменная обучаться с помощью обратного распространения ошибки или ее обновления управляются вручную. По умолчанию — True.
autocast Логическое значение, указывающее, следует ли автоматически приводить типы данных переменных слоя при обращении к ним. По умолчанию — True.
regularizer Объект-регуляризатор, применяемый для вычисления штрафа на вес. Эти штрафы суммируются с функцией потерь во время оптимизации. По умолчанию — None.
constraint Объект-ограничение, применяемый к переменной после обновления оптимизатором, или строковое имя встроенного ограничения. По умолчанию — None.
aggregation Строка: одно из значений 'mean', 'sum', 'only_first_replica'. Аннотирует переменную типом агрегирования между репликами, используемым для этой переменной при создании пользовательских циклов обучения с параллелизмом по данным.
name Строковое имя переменной. Полезно для отладки.

build

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

build(
    input_shape
)

build_from_config

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

build_from_config(
    config
)

Создает состояния слоя с помощью предоставленного словаря конфигурации.

По умолчанию этот метод вызывает метод build(config["input_shape"]), который создает веса на основе формы входных данных слоя, указанной в конфигурации. Если конфигурация содержит другие сведения, необходимые для загрузки состояния слоя, переопределите этот метод.

Аргументы
config Словарь, содержащий форму входных данных, связанную с этим слоем.

call

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

call(
    *args, **kwargs
)

compute_mask

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

compute_mask(
    inputs, previous_mask
)

compute_output_shape

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

compute_output_shape(
    *args, **kwargs
)

compute_output_spec

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

compute_output_spec(
    *args, **kwargs
)

count_params

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

count_params()

Подсчитывает общее количество скалярных значений, составляющих веса.

Возвращает
Целое число — результат подсчета.

from_config

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

@classmethod
from_config(
    config
)

Создает слой на основе его конфигурации.

Этот метод является обратным к get_config и позволяет создать экземпляр того же слоя из словаря конфигурации. Он не обрабатывает связи между слоями (это делает Network) и веса (это делает set_weights).

Аргументы
config Словарь Python, обычно являющийся результатом get_config.
Возвращает
Экземпляр слоя.

get_build_config

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

get_build_config()

Возвращает словарь с формой входных данных слоя.

Этот метод возвращает словарь конфигурации, который можно использовать в build_from_config(config) для создания всех состояний (например, переменных и таблиц поиска), необходимых слою.

По умолчанию конфигурация содержит только форму входных данных, с которой был создан слой. Если вы создаете пользовательский слой, формирующий состояние необычным способом, переопределите этот метод, чтобы это состояние уже было создано к моменту, когда Keras попытается загрузить его значение при загрузке модели.

Возвращает
Словарь, содержащий форму входных данных, связанную со слоем.

get_config

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

get_config()

Возвращает конфигурацию объекта.

Конфигурация объекта — это сериализуемый словарь Python, содержащий сведения, необходимые для повторного создания объекта.

get_weights

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

get_weights()

Возвращает значения layer.weights в виде списка массивов NumPy.

load_own_variables

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

load_own_variables(
    store
)

Загружает состояние слоя.

Вы можете переопределить этот метод, чтобы полностью управлять загрузкой состояния слоя при вызове keras.models.load_model().

Аргументы
store Словарь, из которого будет загружено состояние модели.

quantize

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

quantize(
    mode
)

quantized_call

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

quantized_call(
    *args, **kwargs
)

save_own_variables

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

save_own_variables(
    store
)

Сохраняет состояние слоя.

Вы можете переопределить этот метод, чтобы полностью управлять сохранением состояния слоя при вызове model.save().

Аргументы
store Словарь, в который будет сохранено состояние модели.

set_weights

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

set_weights(
    weights
)

Задает значения layer.weights из списка массивов NumPy.

stateless_call

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

stateless_call(
    trainable_variables,
    non_trainable_variables,
    *args,
    return_losses=False,
    **kwargs
)

Вызывает слой без побочных эффектов.

Аргументы
trainable_variables Список обучаемых переменных модели.
non_trainable_variables Список необучаемых переменных модели.
*args Позиционные аргументы, передаваемые в call().
return_losses Если задано True, stateless_call() вернет список потерь, созданных во время call(), в составе возвращаемых значений.
**kwargs Именованные аргументы, передаваемые в call().
Возвращает
Кортеж. По умолчанию возвращает (outputs, non_trainable_variables). Если задано return_losses = True, возвращает (outputs, non_trainable_variables, losses).
Примечание: non_trainable_variables включают не только необучаемые веса, например статистику BatchNormalization, но и состояние начального значения генератора случайных чисел (если в слое есть случайные операции, например dropout), а также состояние Metric (если к слою присоединены метрики). Все это является состоянием слоя.

Пример:

model = ...
data = ...
trainable_variables = model.trainable_variables
non_trainable_variables = model.non_trainable_variables
# Call the model with zero side effects
outputs, non_trainable_variables = model.stateless_call(
    trainable_variables,
    non_trainable_variables,
    data,
)
# Attach the updated state to the model
# (until you do this, the model is still in its pre-call state).
for ref_var, value in zip(
    model.non_trainable_variables, non_trainable_variables
):
    ref_var.assign(value)

symbolic_call

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

symbolic_call(
    *args, **kwargs
)

__call__

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

__call__(
    *args, **kwargs
)

Вызывает объект как функцию.

© 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/keras/layers/Layer

Spec-Zone.ru

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