Функция nn.conv2d_transpose
Функция nn.conv2d_transpose применяется
к четырехмерному входному тензору и выполняет
операцию, обратную обычной двумерной свертке.
Первым параметром передается входной тензор
формы [batch, height, width, in_channels].
Вторым параметром передается тензор фильтров
формы [height, width, out_channels, in_channels].
Третьим параметром задается форма выходного
тензора output_shape. Дополнительно можно
указать шаг свертки strides, отступы
padding и формат данных data_format.
Синтаксис
tf.nn.conv2d_transpose(
input, filters, output_shape,
strides, padding, [data_format],
[dilations], [name]
)
Пример
Давайте создадим входной тензор формы
1 на 2 на 2 на 1
и один фильтр, а затем выполним транспонированную
свертку с увеличением размера до 4 на 4:
import tensorflow as tf
input_t = tf.constant([[[[1.0], [2.0]], [[3.0], [4.0]]]])
filters = tf.constant([[[[1.0]], [[1.0]]], [[[1.0]], [[1.0]]]])
output_shape = [1, 4, 4, 1]
res = tf.nn.conv2d_transpose(
input_t, filters, output_shape,
strides=[1, 2, 2, 1], padding='SAME'
)
print(res)
Результат выполнения кода:
tf.Tensor(
[[[[1.]
[1. 2.]
[2.]]
[[1. 3.]
[4. 6.]
[3. 4.]]
[[3.]
[3. 4.]
[4.]]]], shape=(1, 4, 4, 1), dtype=float32
)
Пример
Давайте выполним транспонированную свертку с двумя выходными каналами и другим шагом:
import tensorflow as tf
input_t = tf.constant([[[[1.0], [2.0]], [[3.0], [4.0]]]])
filters = tf.constant([
[[[1.0, 2.0]], [[1.0, 2.0]]],
[[[1.0, 2.0]], [[1.0, 2.0]]]
])
output_shape = [1, 4, 4, 2]
res = tf.nn.conv2d_transpose(
input_t, filters, output_shape,
strides=[1, 2, 2, 1], padding='SAME'
)
print(res.shape)
print(res)
Результат выполнения кода:
(1, 4, 4, 2)
tf.Tensor(
[[[[1. 2.]
[1. 2.]
[2. 4.]
[2. 4.]]
[[1. 2.]
[4. 8.]
[6. 12.]
[3. 6.]]
[[3. 6.]
[3. 6.]
[4. 8.]
[4. 8.]]]], shape=(1, 4, 4, 2), dtype=float32
)
Пример
Давайте используем режим отступов VALID
и проверим форму выходного тензора:
import tensorflow as tf
input_t = tf.constant([[[[1.0], [2.0]], [[3.0], [4.0]]]])
filters = tf.constant([[[[1.0]], [[1.0]]], [[[1.0]], [[1.0]]]])
output_shape = [1, 5, 5, 1]
res = tf.nn.conv2d_transpose(
input_t, filters, output_shape,
strides=[1, 2, 2, 1], padding='VALID'
)
print(res.shape)
print(res)
Результат выполнения кода:
(1, 5, 5, 1)
tf.Tensor(
[[[[1.]
[1.]
[2.]
[2.]
[0.]]
[[1.]
[1.]
[2.]
[2.]
[0.]]
[[3.]
[3.]
[4.]
[4.]
[0.]]
[[3.]
[3.]
[4.]
[4.]
[0.]]
[[0.]
[0.]
[0.]
[0.]
[0.]]]], shape=(1, 5, 5, 1), dtype=float32
)
Смотрите также
-
функцию
conv2d,
которая выполняет двумерную свертку -
функцию
conv1d_transpose,
которая выполняет транспонированную одномерную свертку -
функцию
conv3d,
которая выполняет трехмерную свертку -
функцию
depthwise_conv2d,
которая выполняет глубинную двумерную свертку