tf.keras.layers.Lambda
| Просмотреть исходный код на GitHub |
Оборачивает произвольные выражения как объект Layer.
Наследуется от: Layer
tf.keras.layers.Lambda(
function, output_shape=None, mask=None, arguments=None, **kwargs
)
Слой Lambda существует для того, чтобы произвольные функции TensorFlow можно было использовать при создании моделей Sequential и Functional API. Lambda слои лучше всего подходят для простых операций или быстрых экспериментов. Для более сложных случаев рекомендуется наследование от keras.layers.Layer. Одна из причин этого заключается в том, что при сохранении модели Lambda слои сохраняются путем сериализации байткода Python, в то время как настраиваемые слои сохраняются путем переопределения метода get_config и поэтому являются более переносимыми. Модели, которые полагаются на настраиваемые слои, также часто легче визуализировать и понять.
Примеры:
# add a x -> x^2 layer model.add(Lambda(lambda x: x ** 2))
# add a layer that returns the concatenation
# of the positive part of the input and
# the opposite of the negative part
def antirectifier(x):
x -= K.mean(x, axis=1, keepdims=True)
x = K.l2_normalize(x, axis=1)
pos = K.relu(x)
neg = K.relu(-x)
return K.concatenate([pos, neg], axis=1)
model.add(Lambda(antirectifier))
Переменные могут быть созданы внутри слоя Lambda. Как и в других слоях, эти переменные будут созданы только один раз и повторно использоваться, если слой Lambda вызывается для новых входных данных. Если необходимо создать более одной переменной в данном экземпляре Lambda, убедитесь, что каждая переменная имеет разное имя. Обратите внимание, что вызов подслоев внутри слоя Lambda не поддерживается.
Пример создания переменной:
def linear_transform(x): v1 = tf.Variable(1., name='multiplier') v2 = tf.Variable(0., name='bias') return x*v1 + v2 linear_layer = Lambda(linear_transform) model.add(linear_layer) model.add(keras.layers.Dense(10, activation='relu')) model.add(linear_layer) # Reuses existing Variables
Обратите внимание, что создание двух экземпляров Lambda с помощью одной и той же функции не приведет к совместному использованию переменных между двумя экземплярами. Каждый экземпляр Lambda будет создавать и управлять собственными весами.
| Аргументы | |
|---|---|
function | Функция, подлежащая вычислению. В качестве первого аргумента принимает тензор входных данных. |
output_shape | Ожидаемая форма выходных данных функции. Этот аргумент может быть выведен, если не указан явно. Может быть кортежем или функцией. Если кортежем, то он задаёт только размерность с первого элемента; размерность выборки предполагается либо такой же, как у входных данных: output_shape = (input_shape[0], ) + output_shape , либо, если входные данные являются None, и размерность выборки также None: output_shape = (None, ) + output_shape Если функцией, то она задаёт всю форму как функцию формы входных данных: output_shape = f(input_shape) |
mask | Либо None (указывая отсутствие маскирования), либо вызываемый объект с той же сигнатурой, что и метод слоя compute_mask, или тензор, который будет возвращен как выходная маска независимо от входных данных. |
arguments | Необязательный словарь ключевых аргументов, которые необходимо передать функции. |
Форма входных данных: произвольная. Используйте ключевой аргумент input_shape (кортеж целых чисел, не включая ось выборки) при использовании этого слоя в качестве первого слоя в модели. Форма выходных данных: задается аргументом output_shape
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/keras/layers/Lambda