tf.keras.Layer
Это класс, от которого наследуются все слои.
Наследуется от: Operation
tf.keras.Layer(
*,
activity_regularizer=None,
trainable=True,
dtype=None,
autocast=True,
name=None,
**kwargs
)
Используется в ноутбуках
| Используется в руководстве | Используется в учебниках |
|---|---|
Слой — это вызываемый объект, который принимает на вход один или несколько тензоров и возвращает один или несколько тензоров. Он включает в себя вычисление, определённое в методе 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 | Список всего необучаемого состояния слоя. Это расширяет |
output | Извлекает тензор(ы) вывода(ов) слоя. Возвращает только тензор(ы), соответствующий(ие) первому вызову операции. |
supports_masking | Поддерживает ли этот слой вычисление маски с помощью compute_mask. |
trainable_variables | Список всего обучаемого состояния слоя. Это эквивалентно |
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