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__() к слою и предоставляет форму(ы) ввода(ов), которая(ые) могла(и) быть неизвестной(ыми) на момент инициализации.

Слои являются рекурсивно композиционными: если вы присваиваете экземпляр слоя как атрибут другому слою, внешний слой начнёт отслеживать веса, созданные внутренним слоем. Вложенные слои должны быть созданы в методе __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, способным создать тот же слой из словаря конфигурации. Он не обрабатывает соединение слоев (обрабатывается сетью), ни веса (обрабатывается 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

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

END_OF_DOCUMENT_MARKER ```
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
)

Вызов self как функции.

© 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