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