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/Layer

Spec-Zone.ru

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