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