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" для переменных с плавающей запятой и "zeros" для всех других типов (например, int, bool).
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