web-dev-qa-db-fra.com

Rembourrage personnalisé pour les circonvolutions dans TensorFlow

Dans la fonction tensorflow tf.nn.conv2d , l'option de remplissage a juste 'SAME' et 'VALID'.

Mais dans la couche conv de Caffe, il y a option pad peut définir le nombre de pixels à ajouter (implicitement) de chaque côté de l'entrée.

Comment y parvenir dans Tensorflow?

Merci beaucoup.

15
karl_TUM

Vous pouvez utiliser tf.pad() (voir doc ) pour remplir le Tenseur avant d'appliquer tf.nn.conv2d(..., padding="VALID") (un remplissage valide signifie pas de remplissage).


Par exemple, si vous souhaitez remplir l'image avec 2 pixels de hauteur et 1 pixel de largeur, puis appliquer une convolution avec un noyau 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 aura la forme [None, 28, 26, 16], car vous n'avez qu'un rembourrage de 1 en largeur.

34
Olivier Moindrot