Класс Lambda
Класс Lambda применяется для оборачивания
произвольного выражения или функции в слой
нейронной сети. Это удобно, когда нужно выполнить
простую операцию над тензором, не создавая
отдельный именованный класс слоя.
Первым параметром передается функция или
лямбда-выражение, вторым - необязательный
параметр output_shape, задающий форму
выходного тензора. Также можно передать
дополнительные аргументы через arguments.
Синтаксис
tf.keras.layers.Lambda(function, [output_shape], [arguments])
Пример
Давайте создадим слой, который умножает
входной тензор на 2:
import tensorflow as tf
layer = tf.keras.layers.Lambda(lambda x: x * 2)
t = tf.constant([1, 2, 3, 4, 5])
res = layer(t)
print(res)
Результат выполнения кода:
tf.Tensor([ 2 4 6 8 10], shape=(5,), dtype=int32)
Пример
Давайте создадим слой, который возводит элементы входного тензора в квадрат:
Результат выполнения кода:
tf.Tensor([ 1 4 9 16 25], shape=(5,), dtype=int32)
Пример
Давайте создадим слой, который складывает
два входных тензора. Для этого передадим
второй тензор через параметр arguments:
import tensorflow as tf
layer = tf.keras.layers.Lambda(
lambda x, y: x + y,
arguments={'y': tf.constant([10, 20, 30, 40, 50])}
)
t = tf.constant([1, 2, 3, 4, 5])
res = layer(t)
print(res)
Результат выполнения кода:
tf.Tensor([11 22 33 44 55], shape=(5,), dtype=int32)
Пример
Давайте используем слой Lambda внутри
модели Keras для нормализации данных:
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(5,)),
tf.keras.layers.Lambda(lambda x: x / 255.0),
tf.keras.layers.Dense(1)
])
t = tf.constant([[255.0, 128.0, 64.0, 32.0, 16.0]])
res = model(t)
print(res)
Результат выполнения кода:
tf.Tensor([[...]], shape=(1, 1), dtype=float32)
Смотрите также
-
класс
Activation,
который применяет функцию активации к входу -
класс
Dense,
который создает полносвязный слой нейронной сети -
класс
Reshape,
который изменяет форму входного тензора -
класс
Flatten,
который преобразует многомерный тензор в одномерный