Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom padding for convolutions in TensorFlow

In tensorflow function tf.nn.conv2d, the padding option just has 'SAME' and 'VALID'.

But in the conv layer of Caffe, there is pad option can define the number of pixels to (implicitly) add to each side of the input.

How to achieve that in Tensorflow?

Thank you very much.

like image 398
karl_TUM Avatar asked Jun 06 '16 14:06

karl_TUM


People also ask

What is padding in TensorFlow?

Used in the notebooks For each dimension D of input , paddings[D, 0] indicates how many values to add before the contents of tensor in that dimension, and paddings[D, 1] indicates how many values to add after the contents of tensor in that dimension.

What is padding keras?

To ensure that all the input sequence data is having the same length we pad or truncate the input data points. The deep learning model accepts the input data points of standardized tensors. We define the tensors as: tensor(batch_size, length_sequence,features)

What is Conv2D TensorFlow?

Keras Conv2D is a 2D Convolution Layer, this layer creates a convolution kernel that is wind with layers input which helps produce a tensor of outputs.


1 Answers

You can use tf.pad() (see the doc) to pad the Tensor before applying tf.nn.conv2d(..., padding="VALID") (valid padding means no padding).


For instance, if you want to pad the image with 2 pixels in height, and 1 pixel in width, and then apply a convolution with a 5x5 kernel:

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 will have shape [None, 28, 26, 16], because you have only a padding of 1 in width.

like image 199
Olivier Moindrot Avatar answered Oct 22 '22 18:10

Olivier Moindrot