Quelle est la différence entre le "MÊME" et "VALIDES" rembourrage en tf.nn.max_pool de tensorflow?
Quelle est la différence entre le "MÊME" et "VALIDES" rembourrage en tf.nn.max_pool
de tensorflow
?
À mon avis, "VALIDE" signifie qu'il n'y aura pas de zéro de remplissage à l'extérieur des limites quand nous faisons max de la piscine.
Selon Un guide de la convolution de l'arithmétique pour l'apprentissage en profondeur, il dit qu'il n'y aura pas de rembourrage dans la piscine de l'opérateur, c'est à dire l'utilisation juste "VALIDES" de tensorflow
.
Mais qu'est-ce que "MÊME" rembourrage de max de la piscine dans tensorflow
?
Vérifier tensorflow.org/api_guides/python/... pour les détails, c'est comment tf fait.
Voici une jolie réponse détaillée à l'aide de visualisations.
Découvrez ces magnifiques gifs pour comprendre comment rembourrage et de la foulée des travaux. Lien
Voici une jolie réponse détaillée à l'aide de visualisations.
Découvrez ces magnifiques gifs pour comprendre comment rembourrage et de la foulée des travaux. Lien
OriginalL'auteur karl_TUM | 2016-06-07
Vous devez vous connecter pour publier un commentaire.
Je vais vous donner un exemple pour le rendre plus clair:
x
: image d'entrée de la forme [2, 3], 1 canalvalid_pad
: max de la piscine avec 2x2 noyau, stride 2 et VALIDE rembourrage.same_pad
: max de la piscine avec 2x2 noyau, stride 2 et MÊME le rembourrage (c'est le classique la voie à suivre)La sortie de formes sont:
valid_pad
: ici, pas de rembourrage afin que la sortie de la forme [1, 1]same_pad
: ici, nous tampon de l'image de la forme [2, 4] (avec-inf
et ensuite appliquer max de la piscine), de sorte que la sortie de la forme [1, 2]OriginalL'auteur Olivier Moindrot
Si vous aimez l'art ascii:
"VALID"
= sans rembourrage:"SAME"
= zéro padding:Dans cet exemple:
Notes:
"VALID"
jamais gouttes le plus à droite des colonnes (ou lignes les plus basses)."SAME"
essaie de pad uniformément à gauche et à droite, mais si le nombre de colonnes à ajouter est impair, il va ajouter de la colonne à la droite, comme c'est le cas dans cet exemple (la même logique s'applique à la verticale: il peut y avoir une ligne supplémentaire de zéros en bas).Pour répondre à ma propre question latérale: NON, ce n'est pas le point de zéro de remplissage. Vous choisissez la taille du filtre à travailler avec l'entrée (y compris zéro de remplissage), mais vous n'avez pas le choix du zéro de remplissage après la taille du filtre.
meilleure réponse !!!!!!
Je ne comprends pas votre propre réponse @StatsSorceress . Il me semble que vous ajoutez assez de zéros (dans un aussi symétrique que possible), de sorte que toutes les entrées sont couvertes par un filtre, ai-je le droit?
Super réponse, juste pour ajouter: Dans le cas où le tenseur de valeurs peuvent être négatives, rembourrage pour max_pooling est avec
-inf
.OriginalL'auteur MiniQuark
Quand
stride
est de 1 (plus typique de convolution de mise en commun), nous pouvons penser à la distinction suivante:"SAME"
: la taille de la sortie est de la même que la taille de l'image. Cela nécessite la fenêtre de filtre à glisser à l'extérieur de l'entrée de la carte, d'où la nécessité de pad."VALID"
: Fenêtre de filtre reste à valide position à l'intérieur de l'entrée de la carte, de sorte que la taille de sortie se rétrécit parfilter_size - 1
. Pas de rembourrage se produit.SAME
etVALID
peuvent aussi bien avoir été appeléfoo
etbar
Même sentiment ici! @omatai
Je pense que "la taille de sortie est le comme la taille de l'image" n'est vrai que lorsque la longueur de la foulée est 1.
Oui, c'est exactement mon introduction de mots.
Désolé oublié.
OriginalL'auteur YvesgereY
La TensorFlow De Convolution exemple donne un aperçu sur la différence entre
SAME
etVALID
:Pour la
SAME
rembourrage, la sortie de la hauteur et la largeur sont calculés comme:Et
Pour la
VALID
rembourrage, la sortie de la hauteur et la largeur sont calculés comme:OriginalL'auteur RoyaumeIX
Rembourrage est une opération pour augmenter la taille des données d'entrée. Dans le cas de 1-dimensions données que vous venez d'ajouter/préfixer le tableau avec une constante, dans 2-dim vous entourent matrice avec ces constantes. En n-dim vous entourez votre n-dim hypercube avec la constante. Dans la plupart des cas, cette constante est égale à zéro et il est appelé zero-padding.
Voici un exemple de zéro-padding avec
p=1
appliquée à 2-d tenseur:Vous pouvez utiliser arbitraire de rembourrage pour votre noyau, mais certaines des valeurs de remplissage sont utilisés plus fréquemment que d'autres, ils sont:
k
k
, ce remplissage est égal àk - 1
.À l'utilisation arbitraire de rembourrage en TF, vous pouvez utiliser
tf.pad()
OriginalL'auteur Salvador Dali
Explication Rapide
VALID
: Ne pas appliquer de tout remplissage, c'est à dire, supposons que toutes les dimensions sont valide de sorte que l'image d'entrée pleinement est couverte par le filtre et de la foulée que vous avez spécifié.SAME
: Appliquer le rembourrage à l'entrée (si nécessaire) pour que l'image d'entrée est entièrement couvert par le filtre et de la foulée que vous avez spécifié. Pour foulée 1, cela permettra de s'assurer que la taille d'image de sortie est même comme entrée.Notes
NO_PADDING
à la place.AUTO_PADDING
à la place.SAME
(c'est à dire auto-mode pad), Tensorflow va essayer d'étaler rembourrage uniformément sur les deux de gauche et de droite.VALID
(pas de mode de remplissage), Tensorflow va tomber à droite et/ou de cellules de fond si votre filtre et de la foulée n'est pas une couverture complète de l'image d'entrée.OriginalL'auteur Shital Shah
Il y a trois choix de rembourrage: valide (pas de remplissage), même (ou la moitié), complet. Vous pouvez trouver des explications (en Théano) ici:
http://deeplearning.net/software/theano/tutorial/conv_arithmetic.html
La validité de rembourrage n'implique pas de zéro de remplissage, de sorte qu'il ne couvre que les entrées valides, non compris les produits artificiellement des zéros. La longueur de sortie est ((la longueur de l'entrée) - (k-1)) pour le noyau de taille k si la foulée s=1.
La même rembourrage rend la taille des sorties d'être le même que celui des entrées lorsque s=1. Si s=1, le nombre de zéros collier est (k-1).
Le remplissage complet signifie que le noyau s'exécute sur l'ensemble des entrées, donc à la fin, le noyau peut répondre à la seule entrée et des zéros ailleurs. Le nombre de zéros collier est de 2(k-1) si s=1. La longueur de sortie est ((la longueur de l'entrée) + (k-1)) si s=1.
Par conséquent, le nombre de remplissages: (valide) <= (lui-même) <= (complet)
OriginalL'auteur Change-the-world
Je viens de citer cette réponse officielle tensorflow docs https://www.tensorflow.org/api_guides/python/nn#Convolution
Pour la "MÊME" padding, la sortie de la hauteur et la largeur sont calculés comme:
et le rembourrage sur le dessus et à gauche sont calculés comme:
Pour les "VALIDES" de rembourrage, la sortie de la hauteur et la largeur sont calculés comme:
et les valeurs de remplissage sont toujours à zéro.
OriginalL'auteur Vaibhav Dixit
Sur la base des explications ici et le suivi de Tristan réponse, j'ai l'habitude d'utiliser ces fonctions rapides pour des contrôles d'intégrité.
OriginalL'auteur ahmedhosny
Rembourrage marche/arrêt. Détermine la taille effective de votre entrée.
VALID:
Pas de rembourrage. La Convolution etc. des opérations sont effectuées uniquement à des endroits qui sont "valides", c'est à dire pas trop près des frontières de votre tenseur.Avec un noyau de 3x3 et l'image de 10x10, vous serait d'effectuer la convolution sur le 8x8 zone à l'intérieur des frontières.
SAME:
Rembourrage est fourni. Chaque fois que votre opération fait référence à un quartier, à n'importe quelle taille), les valeurs nulles sont fournies lors de ce quartier s'étend à l'extérieur du tenseur d'origine pour permettre cette opération à travailler aussi sur la frontière des valeurs.Avec un noyau de 3x3 et l'image de 10x10, vous serait d'effectuer la convolution sur la totalité de 10x10 zone.
OriginalL'auteur Laine Mikael
VALIDE padding: c'est avec zéro de remplissage. Espérons qu'il y est pas de confusion.
MÊME padding: C'est le genre de difficile à comprendre, en premier lieu, parce que nous avons à examiner 2 conditions séparément comme mentionné dans le officiel docs.
Prenons en entrée comme . (singal dimentina est pris en considération)
De cas 01:
Cas 02:
.
Nous allons travailler sur cet exemple:
Ici la dimension de x est (3,4). Ensuite, si la direction horizontale (3):
Si le vertial direction est prise (4):
Espère que cela va aider à comprendre comment MÊME rembourrage travaille en TF.
OriginalL'auteur GPrathap
Ici, W et H sont la largeur et la hauteur de l'entrée,
F sont les dimensions du filtre,
P est le rembourrage de la taille (c'est à dire, le nombre de lignes ou de colonnes à collier)
De MÊME padding:
Pour VALIDE padding:
OriginalL'auteur Shivam Kushwaha