tf.keras.layers.InputLayer
Это класс, от которого наследуются все слои.
Наследуется от: Layer, Operation
tf.keras.layers.InputLayer(
shape=None,
batch_size=None,
dtype=None,
sparse=None,
batch_shape=None,
input_tensor=None,
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, задающий ограничения на входные данные, которые может принимать слой. |
input | Получает входные тензоры символической операции. Возвращает только тензоры, соответствующие первому вызову операции. |
output | Получает выходные тензоры слоя. Возвращает только тензоры, соответствующие первому вызову операции. |
Методы
from_config
@classmethod
from_config(
config
)
Создаёт слой на основе его конфигурации.
Этот метод является обратным к get_config и позволяет создать тот же слой из словаря конфигурации. Он не обрабатывает связи между слоями (это делает Network) и веса (это делает set_weights).
| Аргументы | |
|---|---|
config | Словарь Python, обычно являющийся результатом вызова get_config. |
| Возвращает | |
|---|---|
| Экземпляр слоя. |
symbolic_call
symbolic_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/InputLayer