Класс UpSampling2D
Класс UpSampling2D применяется к данным
для увеличения их пространственных размеров:
высоты и ширины. Слой повторяет строки и
столбцы входного тензора заданное число раз.
Первым параметром передается кортеж из двух
чисел или одно число size - коэффициент
увеличения по высоте и ширине. Вторым
параметром можно передать метод интерполяции
interpolation - например, nearest или
bilinear. Слой часто используется в
генеративных сетях и автоэнкодерах для
восстановления размерности после сжатия.
Синтаксис
tf.keras.layers.UpSampling2D(size=(2, 2), [interpolation="nearest"])
Пример
Давайте создадим слой UpSampling2D с
коэффициентом увеличения 2 и применим
его к тензору формы (1, 2, 2, 1):
import tensorflow as tf
layer = tf.keras.layers.UpSampling2D(size=(2, 2))
t = tf.constant([[[[1], [2]], [[3], [4]]]])
res = layer(t)
print(res)
Результат выполнения кода:
tf.Tensor(
[[[[1]
[1]
[2]
[2]]
[[1]
[1]
[2]
[2]]
[[3]
[3]
[4]
[4]]
[[3]
[3]
[4]
[4]]]], shape=(1, 4, 4, 1), dtype=int32)
Пример
Давайте применим слой к тензору с тремя
каналами и размером (1, 2, 2, 3):
import tensorflow as tf
layer = tf.keras.layers.UpSampling2D(size=(2, 2))
t = tf.constant([[
[[1, 2, 3], [4, 5, 6]],
[[7, 8, 9], [10, 11, 12]]
]])
res = layer(t)
print(res.shape)
Результат выполнения кода:
(1, 4, 4, 3)
Пример
Давайте используем метод интерполяции
bilinear вместо стандартного nearest:
Результат выполнения кода:
tf.Tensor(
[[[[1. ]
[1.5]
[2. ]
[2. ]]
[[2. ]
[2.5]
[3. ]
[3. ]]
[[3. ]
[3.5]
[4. ]
[4. ]]
[[3. ]
[3.5]
[4. ]
[4. ]]]], shape=(1, 4, 4, 1), dtype=float32)
Пример
Давайте встроим слой UpSampling2D в
модель Keras вместе со слоем Conv2D:
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(2, 2, 1)),
tf.keras.layers.UpSampling2D(size=(2, 2)),
tf.keras.layers.Conv2D(1, (3, 3), padding="same")
])
model.summary()
Результат выполнения кода:
Model: "sequential"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ up_sampling2d (UpSampling2D) │ (None, 4, 4, 1) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d (Conv2D) │ (None, 4, 4, 1) │ 10 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 10 (40.00 B)
Trainable params: 10 (40.00 B)
Non-trainable params: 0 (0.00 B)
Смотрите также
-
класс
Conv2DTranspose,
который выполняет транспонированную свертку с увеличением размерности -
класс
Conv2D,
который выполняет двумерную свертку над изображениями -
класс
ZeroPadding2D,
который добавляет нулевые отступы вокруг тензора -
класс
Reshape,
который изменяет форму тензора без изменения данных