Пользовательское дополнение для сверток в TensorFlow

В функции tensorflow tf.nn.conv2d параметр дополнения просто имеет "САМ" и "VALID".

Но в conv-слое Caffe есть параметр pad, который может определять количество пикселей, которые (неявно) добавляют к каждой стороне вход.

Как добиться этого в Tensorflow?

Большое спасибо.

Ответ 1

Вы можете использовать tf.pad() (см. doc), чтобы надеть тензор перед применением tf.nn.conv2d(..., padding="VALID") (допустимое заполнение означает отсутствие прокладки).


Например, если вы хотите поместить изображение с высотой 2 пикселя и шириной 1 пиксель, а затем применить свертку с ядром 5x5:

input = tf.placeholder(tf.float32, [None, 28, 28, 3])
padded_input = tf.pad(input, [[0, 0], [2, 2], [1, 1], [0, 0]], "CONSTANT")

filter = tf.placeholder(tf.float32, [5, 5, 3, 16])
output = tf.nn.conv2d(padded_input, filter, strides=[1, 1, 1, 1], padding="VALID")

output будет иметь форму [None, 28, 26, 16], потому что у вас есть только пробел шириной 1.