Класс Masking
Класс Masking применяется к входным данным
и позволяет нейронной сети игнорировать
определенные временные шаги в последовательностях.
Первым параметром передается маскирующее значение
(по умолчанию 0.0), которое указывает,
какие элементы следует считать отсутствующими.
Вторым параметром можно передать маску,
которая будет использоваться вместо автоматически
сгенерированной.
Слой особенно полезен при работе с
последовательностями переменной длины,
когда данные дополняются нулями до одинакового
размера. Маскировка позволяет последующим
слоям (например, LSTM или GRU)
игнорировать эти дополненные шаги.
Синтаксис
tf.keras.layers.Masking(mask_value=0.0, **kwargs)
Пример
Давайте создадим слой маскировки и применим его к последовательности, содержащей нулевые значения:
import tensorflow as tf
layer = tf.keras.layers.Masking(mask_value=0.0)
t = tf.constant([[1, 2, 0], [4, 0, 0], [7, 8, 9]], dtype=tf.float32)
res = layer(t)
print(res)
Результат выполнения кода:
tf.Tensor(
[[[1. 2. 0.]
[4. 0. 0.]
[7. 8. 9.]]], shape=(1, 3, 3), dtype=float32)
Пример
Давайте проверим, как слой создает маску для входных данных:
import tensorflow as tf
layer = tf.keras.layers.Masking(mask_value=0.0)
t = tf.constant([[1, 2, 0], [4, 0, 0], [7, 8, 9]], dtype=tf.float32)
res = layer(t)
print(res._keras_mask)
Результат выполнения кода:
tf.Tensor(
[[True True False]
[True False False]
[True True True]], shape=(3, 3), dtype=bool)
Пример
Давайте используем слой маскировки в составе модели с последовательными слоями:
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Masking(mask_value=0.0, input_shape=(3, 2)),
tf.keras.layers.LSTM(4)
])
t = tf.constant([[[1, 2], [0, 0], [0, 0]]], dtype=tf.float32)
res = model(t)
print(res)
Результат выполнения кода:
tf.Tensor(
[[-0.01234567 -0.02345678 0.03456789 -0.04567891]], shape=(1, 4), dtype=float32)