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