2017-06-11 4 views
1

J'utilise ces thesesources pour construire un autoencoder convolutif en tensorflow. Je comprends que j'ai besoin de tamponner mon image d'entrée avec des zéros, afin d'obtenir une sortie du décodeur égale à l'entrée d'origine. L'auteur donne un exemple pour le cas simple d'un noyau carré et des valeurs égales pour les foulées (verticales et horrizontal). J'ai besoin de généraliser cette fonction de remplissage pour mon entrée, mais je n'arrive pas à obtenir la forme correcte de mon tenseur. Ma fonction à ce jour est:Trouver la quantité de zéros pour remplir l'entrée d'une couche convolutionnelle

def _pad(self, input_x, filter_height, filter_width): 
    """ 
    pads input_x with the right amount of zeros. 
    Args: 
     input_x: 4-D tensor, [batch_side, widht, height, depth] 
     filter_side: used to dynamically determine the padding amount 
    Returns: 
     input_x padded 
    """ 
    # calculate the padding amount for each side 
    top_bottom_padding = filter_height - 1 
    left_right_padding = filter_width - 1 

    # pad the input on top, bottom, left, right, with amount zeros 
    return tf.pad(input_x, 
        [[0, 0], [top_bottom_padding, top_bottom_padding], [left_right_padding, left_right_padding], [0, 0]]) 

Cela me donne

Shape of input: (10, 161, 1800, 1) 
Shape of padded input: (10, 187, 1826, 1) 
Shape of encoder output: (10, 187, 913, 15) 
Shape of decoder output: (10, 187, 457, 15) 

pour

num_outputs=15, kernel_size=14, stride=[1,2] 

Toute idée sur ce que je fais mal?

Répondre

1

La fonction que vous utilisez ne prend pas en compte les foulées. En fait, il décrémente juste de 1 votre entrée initiale. Pour le cas 1D, connaissant la taille d'entrée i, la taille du noyau k, foulée s et le rembourrage p vous pouvez calculer la taille de sortie de la convolution:

enter image description here

ici || opérateur signifie opération de plafond. Connaissant le calcul pour un cas de 1-dim, cas n-dim est facile une fois que vous voyez que chaque dim est indépendant. Donc, vous venez de glisser chaque dimension séparément.


regardant la formule, et sachant que votre o doit être égale à i, vous pouvez calculer le rembourrage approprié.