Класс RandomTranslation
Класс RandomTranslation относится к слоям предобработки изображений и применяется к данным во время обучения. Слой случайным образом смещает изображение по ширине и высоте, заполняя освободившиеся области нулями. Первым параметром передаётся ширина сдвига, вторым - высота сдвига. Третьим параметром можно указать режим заполнения fill_mode, а четвёртым - значение для заполнения fill_value.
Ширина и высота сдвига задаются либо числом, либо кортежем из двух чисел. Если передано одно число, сдвиг выбирается случайно в диапазоне от минус этого числа до плюс этого числа. Если передан кортеж, сдвиг выбирается в указанном диапазоне. Значения задаются в долях от размера изображения.
Синтаксис
tf.keras.layers.RandomTranslation(
height_factor,
width_factor,
fill_mode='reflect',
fill_value=0.0,
seed=None
)
Пример
Давайте создадим слой случайного сдвига и применим его к тензору изображения:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.RandomTranslation(0.2, 0.2)
t = tf.constant([[[[1], [2]], [[3], [4]]]], dtype=tf.float32)
res = layer(t, training=True)
print(res)
Результат выполнения кода:
tf.Tensor(
[[[[0.]
[0.]]
[[0.]
[0.]]]], shape=(1, 2, 2, 1), dtype=float32)
Пример
Давайте применим слой к изображению с формой побольше и посмотрим на результат:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.RandomTranslation(0.1, 0.1, fill_mode='constant')
t = tf.constant([[[[1], [2], [3]], [[4], [5], [6]], [[7], [8], [9]]]], dtype=tf.float32)
res = layer(t, training=True)
print(res)
Результат выполнения кода:
tf.Tensor(
[[[[0.]
[0.]
[0.]]
[[0.]
[1.]
[2.]]
[[0.]
[4.]
[5.]]]], shape=(1, 3, 3, 1), dtype=float32)
Пример
Давайте используем слой внутри модели Keras для аугментации данных:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.RandomTranslation(0.2, 0.2),
tf.keras.layers.Conv2D(1, (1, 1), input_shape=(4, 4, 1))
])
t = tf.constant([[[[1], [2], [3], [4]],
[[5], [6], [7], [8]],
[[9], [10], [11], [12]],
[[13], [14], [15], [16]]]], dtype=tf.float32)
res = model(t, training=True)
print(res.shape)
Результат выполнения кода:
(1, 4, 4, 1)
Смотрите также
-
класс
RandomRotation,
который случайно поворачивает изображение -
класс
RandomZoom,
который случайно масштабирует изображение -
класс
RandomFlip,
который случайно отражает изображение -
класс
RandomCrop,
который случайно вырезает часть изображения